{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Redes Neuronales Recurrentes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Julián D. Arias Londoño\n", "\n", "Profesor Asociado \n", "Departamento de Ingeniería de Sistemas \n", "Universidad de Antioquia, Medellín, Colombia \n", "julian.ariasl@udea.edu.co" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Las redes neuronales recurrentes (En inglés Recurrent Neural Networks - RNN) son una familia de redes neuronales para procesar datos secuenciales, las cuales se basan en el principio de compartir parámetros a lo largo de diferentes partes del modelo, lo que permite aplicar el modelo a datos con estructuras diferentes (por ejemplo diferentes longitudes) y generalizar sobre ellos. Si por el contrario se tuviera un párametro para cada índice de tiempo, no se podría generalizar a longitudes de secuencias no vistas durante el entrenamiento, o compartir patrones detectados por el modelo a lo largo de diferentes longitudes de secuencias y posiciones en el tiempo; dicha propiedad es particularmente importante cuando una pieza de información específica puede ocurrir en múltiples posiciones dentro de una secuencia [1]." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La red permanece Feed-forward pero mantiene el estado interno a través de nodos de contexto los cuales influencian la capa oculta en entradas subsecuentes. Existen diferentes arquitecturas de RNN, las más conocidas son (Figura tomada de Link.):" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![alt text](Images/RNN2.png \"Neuronas\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Las RNN pueden resolver diferentes paradigmas de aprendizaje, es decir, tienen la capacidad de ajustarse a diferentes configuraciones en los datos. El diagrama construido por Andrej Karpathy representa muy bien dicha capacidad:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![alt text](Images/RNN-Topol.jpeg \"Neuronas\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El primer caso corresponde a una MLP convencional en la cual se tiene una salida por cada entrada y no existe información compartida a través de las capas ocultas. El segundo caso corresponde a un problema en el que a una entrada, el modelo debe producir una salida compuesta de varios elementos, como por ejemplo un sistema al cual se le presente una imágen y proporcione como salida una descripción o listado de los objetos en la imágen (problema conocido como caption generation). La tercera opción corresponde a un problema en el que al sistema se le presenta una secuencia y el modelo debe proporcionar una única salida para toda la secuencia, por ejemplo en el problema de Sentiment Analysis, usualmente el objetivo es que el sistema catalogue un texto como positivo o negativo. El cuarto caso corresponde a problemas en los que la entrada es una secuencia y la salida otra, sin que necesariamente ambas secuencias deban tener la misma longitud (esta configuración también se conoce como sequence-to-sequence). Un ejemplo de este tipo de paradigmas se presenta en la traducción automática de textos en la que la oración en el lenguaje original puede tener un número mayor o menor de palabras que en el lenguaje objetivo. El quinto caso corresponde a un problema en el que para cada entrada el sistema debe proporcionar una salida (la longitud de las secuencias entrada y salida es la misma), a este tipo de paradigmas corresponde la predicción de series de tiempo, el etiquetado morfosintáctico, varias tareas en Bioinformática, entre otros." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La arquitectura Elman de las RNN es la más comunmente usada. De acuerdo con la notación definida en la primera figura, la descripción matemática de una red de este tipo con una sola capa oculta y una capa de salida estaría dada por:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$${\\bf{a}}^{(t)} = {\\bf{b}} + {\\bf{V}}{\\bf{h}}^{(t-1)} + {\\bf{U}}{\\bf{x}}^{(t)},\\\\ {\\bf{h}}^{(t)} = \\tanh({\\bf{a}}^{(t)}), \\\\ {\\bf{o}}^{(t)} = {\\bf{c}} + {\\bf{W}}{\\bf{h}}^{(t)}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "donde $\\bf{V}$ corresponde a la matriz de pesos que conectan la salida de una neurona en el tiempo anterior para usarla como entrada en el tiempo actual. $\\bf{U}$ es la matriz de pesos para las entradas de la red y $\\bf{W}$ es la matriz de pesos que conecta el estado de la neurona interna con la neurona de la capa de salida. $\\bf{b}$ y $\\bf{c}$ son vectores con los términos independientes de la capa oculta y la capa de salida respectivamente. La salida ${\\bf{y}}^{(t)}$ de la red estará determinada por la función de activación aplicada sobre los valores ${\\bf{o}}^{(t)}$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Backpropagation through time (BPTT)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para incorporar las habilidades descritas, una RNN incluye la capacidad de mantener memoria interna y usar la información almacenada a través de lazos de realimentación y de esa manera darle soporte al modelamiento temporal, es decir, a la condición de dependencia estadística de observaciones consecutivas. Como se puede observar en la siguiente figura, la salida de las neuronas en la capa oculta, es usada nuevamente como entrada a la misma capa. Figura tomada de Link.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![alt text](Images/RNN3.png \"Neuronas\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El entrenamiento de una RNN puede realizarse usando el algoritmo Backpropagation descrito en clases anteriores, teniendo en cuenta el modelo desdoblado mostrado en la primera figura. Es decir, es necesario propagar la red hacia adelante, almacenar todas las salidas parciales de las diferentes neuronas en cada una de las capas y tiempos $t$, y a partir de la función de costo definida, propagar el error hacia atrás. La pérdida total para una secuencia de valores $\\bf{x}$ y su correspondiente secuencia de salida $\\bf{y}$ (tenga en cuenta que la red puede tener múltiples salidas, entonces cada salida corresponde a un vector), corresponderá entonces a la suma de las pérdidas para cada uno de los tiempos en la secuencia. La función de costo de la red será entonces:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$L(\\{ {\\bf{x}}^{(1)},{\\bf{x}}^{(2)},\\cdots,{\\bf{x}}^{(\\tau)} \\}, \\{ {\\bf{y}}^{(1)},{\\bf{y}}^{(2)},\\cdots,{\\bf{y}}^{(\\tau)} \\}) \\\\\n", "L = \\sum_t L^{(t)}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dependiendo del tipo de problema a resolver, la función de pérdida puede ser el error cuadrático medio, o en problemas de clasificación el negativo de la verosimilitud $L^{(t)} = -\\log Pmodel (\\hat{y}^{(t)} |\\{{\\bf{x}}^{(1)},\\cdots,{\\bf{x}}^{(t)} \\})$, donde $Pmodel(\\cdot)$ corresponde a la probabilidad asignada por el modelo a la salida de la red que para el tiempo $(t)$ debería estar en uno. Se asume en este caso que la función de actividación de la capa salida corresponde a una función softmax, la cual garantiza que la salida de la red pueda ser interpretada como una probablidad. Uno de los problemas del algoritmo BPTT es que las operaciones de forward y backward del algoritmo no son paralelizables por su interdepedencia, lo que hace al algoritmo completamente secuencial." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "En primer lugar debemos estimar el gradiente de la función de costo con respecto a las salidas de la red en un tiempo cualquiera $(t)$:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$(\\nabla_{{\\bf{o}}^{(t)}}L)_i = \\frac{\\partial L}{\\partial o_i^{(t)}} = \\frac{\\partial L}{\\partial L^{(t)}} \\frac{\\partial L^{(t)}}{\\partial o_i^{(t)}} = \\hat{y}_i^{(t)} - 1 \\\\ \\nabla_{{\\bf{o}}^{(t)}}L = {\\bf{y}}^{(t)} \\odot ({\\bf{\\hat{y}}}^{(t)} - {\\bf{1}} )$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "En la expresión anterior $\\odot$ representa el producto Hadamard, es decir el producto punto a punto entre los vectores. Note que el único objetivo es mostrar que el gradiente es un vector que sólo puede tomar valor diferente de cero en la posición que corresponde a la salida deseada en el tiempo $(t)$, los demás valores son cero. A partir de la expresión anterior, podemos comenzar entonces el ciclo de propagación hacia atrás a partir del final de la secuencia. En el tiempo final $\\tau$, ${\\bf{h}}^{(\\tau)}$ sólo tiene a ${\\bf{o}}^{(\\tau)}$ como descendiente, por lo tanto su gradiente es simple:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$ \\nabla_{{\\bf{h}}^{(\\tau)}} L = {\\bf{W}}^T\\nabla_{{\\bf{o}}^{(\\tau)}}L$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A partir de este punto se puede comenzar a iterar hacia atrás para propagar los gradientes a través del tiempo, desde $t=\\tau-1$ hasta $t = 1$. Hay que tener en cuenta que ahora ${\\bf{h}}^{(t)}$ (para $t < \\tau$) tiene dos descendientes ${\\bf{o}}^{(t)}$ y ${\\bf{h}}^{(t+1)}$. Su gradiente está dado por:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$ \\nabla_{{\\bf{h}}^{(t)}}L = \\left( \\frac{\\partial {\\bf{h}}^{(t+1)}}{\\partial {\\bf{h}}^{(t)}}\\right)^T(\\nabla_{{\\bf{h}}^{(t+1)}} L) + \\left(\\frac{\\partial {\\bf{o}}^{(t)}}{\\partial {\\bf{h}}^{(t)}}\\right)^T(\\nabla_{{\\bf{o}}^{(t)}}L) \\\\\n", "\\nabla_{{\\bf{h}}^{(t)}}L = {\\bf{V}}^T(\\nabla_{{\\bf{h}}^{(t+1)}} L)\\text{diag} \\left( 1 - \\left( {\\bf{h}}^{(t+1)} \\right)^2\\right) + {\\bf{W}}^T(\\nabla_{{\\bf{o}}^{(t)}}L)$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Una vez se obtienen los gradientes de los nodos internos, se pueden obtener los gradientes de los parámetros, teniendo en cuenta que estos se comparten a lo largo del tiempo:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$ \\nabla_{\\bf{c}} L = \\sum_t \\left(\\frac{\\partial {\\bf{o}}^{t}}{\\partial {\\bf{c}}}\\right)^T \\nabla_{{\\bf{o}}^{(t)}}L$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$ \\nabla_{\\bf{b}} L = \\sum_t \\left(\\frac{\\partial {\\bf{h}}^{t}}{\\partial {\\bf{b}}}\\right)^T \\nabla_{{\\bf{h}}^{(t)}}L = \\sum_t \\text{diag}\\left( 1 - \\left( {\\bf{h}}^{(t)} \\right)^2\\right)\\nabla_{{\\bf{h}}^{(t)}} L $$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\\nabla_{{\\bf W}}L = \\sum_t \\sum_i \\left( \\frac{\\partial L}{\\partial o_i^{(t)}} \\right)^T \\nabla_{{\\bf W}} o_i^{(t)} = \\sum_t (\\nabla_{{\\bf{o}}^{(t)}}L){\\bf{h}}^{(t)^T}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\\nabla_{\\bf V}L = \\sum_t \\text{diag}\\left( 1 - \\left( {\\bf{h}}^{(t)} \\right)^2\\right)(\\nabla_{{\\bf{h}}^{(t)}} L){\\bf{h}}^{(t-1)^T}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$ \\nabla_{\\bf U}L = \\sum_t \\text{diag}\\left( 1 - \\left( {\\bf{h}}^{(t)} \\right)^2\\right)(\\nabla_{{\\bf{h}}^{(t)}} L){\\bf{x}}^{(t)^T} $$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Una vez calculados los gradientes se puede proceder a actualizar los parámetros usando la regla del gradiente descendente o similar. Veamos un ejemplo de aplicación:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch: 100; Error: 0.25121219195;\n", "Epoch: 200; Error: 0.0754892838743;\n", "Epoch: 300; Error: 0.120768353064;\n", "Epoch: 400; Error: 0.0752163347489;\n", "Epoch: 500; Error: 0.0640042835346;\n", "The maximum number of train epochs is reached\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiIAAAFtCAYAAAA6UgEOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xd4VFX6wPHvmwAJRToCKl1BsBO7okgRsYDdDWJ3bYvu\nD921F2Ata2UVdcUOIgE7WCACii4KlsROE6nSa2hJIJn398eZgckwmcaUlPfzPPeZufeee+6ZS0je\nOVVUFWOMMcaYVEhLdQGMMcYYU31ZIGKMMcaYlLFAxBhjjDEpY4GIMcYYY1LGAhFjjDHGpIwFIsYY\nY4xJGQtEjDHGGJMyFogYY4wxJmUsEDHGGGNMylggYowxxpiUqRHLRSIiQFOgDrBOVbfFtVTGGGOM\nqRYirhERkdoicpWI5AKbgVXAQmCziMwTkREicniiCmqMMcaYqkciWfRORG4CHgBWAx8C3wIrgEKg\nMXAo0A04B5gKDFbVRQkqszHGGGOqiEgDkfeBB1U1L0y6usBfge2q+mJ8imiMMcaYqiqiQMQYY4wx\nJhHiOmpGROrHMz9jjDHGVG3RdFbdICJN/fbfFZHmfvvNgY1xLp8xxhhjqrBoakQaBqQ/HagbkEb2\nukTGGGOMqTbiPaGZdTgxxhhjTMRSPrOqiNwgIj+JSIF3+1pEzghzzUUiMkdECr3X9k1WeY0xxhgT\nP9EEIkrZGo/A/VgtA+4AugJZwGfABBHpHCyxiJwIjAVeAo4EJgAfiEiXOJTFGGOMMUkU8fBdEfEA\nawCP91BzYB1Q6t1PA5qpavpeF0pkPfAPVX0tyLlxQB1V7ed3bCbwg6retLf3NsYYY0zyRLPWzI0J\nK4WXiKQBF+PWsJlZTrITgCcDjuUC/RNYNGOMMcYkQMSBiKqOTFQhRORQXOCRCWwBzlPVueUkb4Gb\nat7fau/xUPdoAvQBFgNFe1NeY4wxpprJBNoCuaq6Pp4Zx7T6ro+I1ALOww3jnaaqS2LMai5wBNAA\nuBAYLSKnhAhGYtEHeDOO+RljjDHVzaW4fppxE3EgIiL/BjJV9f+8+zWAr3CdTIuAEhHprarfRlsI\nVS3BreQL8IOIHAv8neDNQatw/VP8NfceD2UxwJgxY+jcOWg/WJMAgwcPZvjw4akuRrVizzz57Jkn\nnz3z5JozZw4DBw4E79/SeIqmRuQs4D6//WzgIKATrmCjvOfPiUO50oCMcs7NBHoCz/gd6035fUp8\nigA6d+5M165d97qAJjINGjSw551k9syTz5558tkzT5m4d22IJhBpDfzmt38G8I6qLgAQkSeBD6Mt\ngIg8DEwClgL74Kp9TsXN3IqIjAb+VNW7vZc8DUwXkVuBj3EBURZu1V9jjDHGVCLRTmjmP9b3eMrW\nQqwHGsdQhn1xtSlzgam4oOJ0Vf3Me/4A/DqiqupMYABwHfAjcD7QX1Vnx3BvY4wxxqRQNDUic4Ez\ngWdEpBOu9+x0v/NtcPOMREVVrw1zvkeQY+8C70Z7L2OMMcZULNEEIk8AY0SkD26EyxRV/cPv/BnA\n9/EsnKn8srOzU12EaseeefLZM08+e+ZVR8QzqwKIyJm4zqirgKdUdYvfuYeA6ao6Je6ljAMR6Qrk\n5eXlWQcnY4wxJgr5+flkZWUBZKlqfjzzjmoeEVX9BPiknHP3xKVExhhjjKk2oplHZN9I0qlq1P1E\njDHGGFM9RVMjstLvvbDnyru+Y3u96J0xxhhjqodop3hfBrwOfMruVXeNMcYYY2ISTSDSDrgKuBK4\nGhgNvBYwcsYYY4wxJmIRT2imqktVdaiqtsMFIu2An0VkuohcJiKSsFIaY4wxpkqKdmZVAFR1qqpe\nCrQHPLjmmkZxLJcxxhhjqoGYAhER6SoizwKzgabAbcCmeBbMGGOMMVVfNMN3mwADcc0yrYBxQB9V\ntdlUjTHGGBOTaDqrLsfNqDoKeA8oBBCRjv6JVHV+3EpnjDHGmCotmqaZWkBr4D4gH5jj3eYGvEZF\nRO4SkW9FZLOIrBaR9wODmyDXXCEiHhEp9b56RGR7tPc2xhhjTGpFUyPSOUFl6AaMwC2YVwN4BPhU\nRDqramGI6wqAjriJ1GDPCdaMMcYYU8FFHIio6rxEFEBVz/TfF5ErgTVAFjAj9KW6NhFlMsYYY0xy\nxDRqJsEa4mo3NoRJV09EFovIUhH5QES6JKFsxhhjjImjChWIeCdF+w8wQ1Vnh0g6Dzd6px9wKe5z\nfC0i+yW+lMYYY4yJl2jXmkm054EuwEmhEqnqLGCWb19EZuI6yl4PPJDIAhpjjDEmfipMIOKdIO1M\noJuqrgyX3p+qlojID8CB4dIOHjyYBg0alDmWnZ1NdnZ2NLc0xhhjqqScnBxycnLKHCsoKEjY/UQ1\nusEmIvIJkK2qBQHH9wHGB3Y+jTDPZ4H+wKmqujCG69OA34CPVfUf5aTpCuTl5eXRtWvXaG9hjDHG\nVFv5+flkZWUBZKlqfjzzjqVGpA+QEeR4JtA72sxE5HkgG9ffY5uINPeeKlDVIm+aUcByVb3bu38f\nrmlmAa5z6+24OU5ejvb+xhhjjEmdaKZ4900yJkAHEWnodzod6AusiKEMN+BGyUwPOH4VMNr7vhVQ\n6neuEfAi0ALYCOQBJ6jq3Bjub4wxxpgUiaZGZC4uYFD2nN9DgGJgcLQFUNWwI3dUtUfA/q3ArdHe\nyxhjjDEVS7Qzqwpuxd1uwDq/czuAlb6mFGOMMcaYSEQ9s6qI1FbV4sQVyRhjjDHVRUSBiIicHrBf\nblpV/XQvy2SMMcaYaiLSGpHJEaZTXMdVY4wxxpiwIg1Eaie0FMYYY4ypliIKRKxPiDHGGGMSIeoJ\nzUTk9lDnVfWx2ItjjDHGmOoklplVrwrYr4mbcKwY+BOwQMQYY4wxEYk6EFHVzoHHRKQx8DowNg5l\nMsYYY0w1EXZW00io6gbgXuDheORnjDHGmOohLoGIV12gcRzzM8YYY0wVF0tn1esCDwEtcX1HpsSj\nUMk2ciQ0agQXX5zqkhhjjDHVSyydVYcG7HuAtcC7wLC9LlEK3HCDe73gAki36diMMcaYpIm6aUZV\nWwZs+6vqkap6q6puijY/EblLRL4Vkc0islpE3heRjhFcd5GIzBGRQhH5SUT6RntvAI9n9/upU2PJ\nwRhjjDGximcfkVh1A0YAxwG9cMOBPxWRcmdzFZETcSN0XgKOBCYAH4hIl2hvvnLl7vcffRTt1cYY\nY4zZG7E0zSAihwMXAq2BWv7nVHVANHmp6pkBeV8JrAGygBnlXHYLMElVn/Lu3y8ivYFBwE2h71d2\n/48/3Ot++8Hq1dGU3BhjjDF7K+oaERE5H/geOAHIBpp6358Z6rooNMQtnrchRJoTgMCGlFzv8ZBK\nSsruL1zoXo87zgIRY4wxJtliaZq5H7hdVXsDO4AbgIOAD4Df9qYwIiLAf4AZqjo7RNIWQGDYsNp7\nPKQdO8ru//GHqw1p2xbWrImquMYYY4zZS7E0zRyE65MBLhCpq6olIvIYbvjuQ3tRnueBLsBJe5FH\nSHfcMZimTRvs2s/Ph332yWbffbOtRsQYY0y1l5OTQ05OTpljBQUFCbtfLIHIRtzkZQArgM7AL0A9\nYJ9YCyIiz+Kad7qp6sowyVcBzQOONfceD+mBB4bTp0/XXftnnAF160Lz5rBxo6sxqVUrRAbGGGNM\nFZadnU12dnaZY/n5+WRlZSXkfrE0zXwF9PC+fx94WkRGAG8C02MphDcI6Q+cpqpLI7hkJtAz4Fhv\n7/GQdu4su791K+yzD+y7r9tfty6CuxtjjDEmLmKpEbkZ8A2tHYab0OxE4FPggWgzE5HncZ1e+wHb\nRMRX01GgqkXeNKOA5ap6t/fc08B0EbkV+Nh7fRbw13D3C+ysumUL1Ku3OxBZvdr1GTHGGGNM4kUU\niIjIw8CDqrodaAvkAahqCTBkL8twA26UzPSA41cBo73vWwGlvhOqOlNEBuD6ozwE/A70D9PBFdgz\nENm61QUizb3hj3VYNcYYY5In0hqRf+JqIbbjmj9a4ub62GuqGrZ5SFV7BDn2Lm5a+agEC0T22Qea\nNXP71mHVGGOMSZ5IA5GlwPUikotb5O4oEdkYLKGqfhuvwiVCeU0ztWu7gMQCEWOMMSZ5Ig1E7gRe\nxDXDKDCpnHQKVOhl4/wDkdJSKCx0gQhAkyZu5IwxxhhjkiOiQERV3wbeFpGmuCaZw3Er7lY6/oHI\ntm3udR/voOP69WHz5uSXyRhjjKmuoho1o6rrvKvczvV2VK10/AORrVvdq69GpEEDC0SMMcaYZIp6\nHhFVzQX2E5F7ReQ1EWkGICI9RaRT3EsYZ/6ByJYt7tUXiFiNiDHGGJNcsSx6dyIwG+gDDGD3bKrH\nA/+KX9ESI1SNSP36kMBZbI0xxhgTIJaZVR/DzSnSDbfWjM9UIlj9NtWCBSLWR8QYY4xJjVgCkSOA\n8UGOrwaa7V1xEs/6iBhjjDEVRyyByGZg3yDHD8ctglehWR8RY4wxpuKIJRB5G/i3iDTGzRuiIpIF\nPAGMjWfhEiFYjUhd71rC1kfEGGOMSa5YApE7gT+BVUBd4DfgW+AnYGj8ipYYgYFI3bqQ5n0K9etD\ncbHbjDHGGJN4Ua++610R9zIRGQYcBtQD8lX113gXLhECAxFfswy4PiLgmmwyMpJbLmOMMaY6iqVG\nBABV/V1V31PV0XsbhIhINxGZKCLLRcQjIv3CpD/Vm85/KxWRYH1Xyti5c/f7LVt2j5gBVyMC1k/E\nGGOMSZaIakRE5OFIM1TVu2MoR13gR+AV4L1IbwV0BLb43TvsisChakR8gYj1EzHGGGOSI9KmmdMC\n9g8BagELvfvtgWJcf5GoqepkYDKAiEgUl65V1ajqLwLXmvF1VIXdTTNWI2KMMcYkR0RNM6p6gm8D\n3gS+BlqrahdV7QK0BmYAOYkr6h4E+FFEVojIp94ZX8PyD0QKC6F27d371jRjjDHGJFcsfUTuAP7h\n3wzifX8XbkRNMqwErgcuAM4HlgHTReTIcBf6ByJFRZCZuXvfAhFjjDEmuaIeNQM0AhoHOd4QaLB3\nxYmMqs4H5vsdmiUiHYDBwBWhrg2sEWnYcPd+ZibUqGF9RIwxxphkiSUQmQi8IiJ/x80fAnAcMNx7\nLlW+BU4Kl2jatMH06+fipbw8qFMHcnKyyc7ORsSNovFNdGaMMcZUNzk5OeTklO1pUZDAb+ixBCLX\nAc8AE9jdtOMB3gD+HqdyxeJIXJNNSCedNJzx47sCcMwx0LUrZGfvPl+vngUixhhjqq/sbPfl3F9+\nfj5ZWVkJuV8sE5ptBa4WkduAg7yHf1fVjbEWQkTqAgfiOqACtBeRI4ANqrpMRB4B9lPVK7zp/w4s\nwo3SyQT+ihvZ0zvcvUL1EQELRIwxxphkiqVGBABv4PFt2ISRORr4HO/aNcCT3uOjgKuBFkArv/S1\nvGn2A7YDPwM9VfXLcDeyQMQYY4ypOCKd0Ow/wMORTBgmIv2BTFUdH2khVPULQozgUdWrAvYfBx6P\nNH9/oYbvggUixhhjTDJFWiOyE1ggIlOBD4HvgRVAEW4UTRfgZGAAbqbTa+Jf1PiwGhFjjDGm4ogo\nEFHVf4rIM7iOqncDHXBNKD5FuKaVfwATVFX3zKViiKRGZNWq5JbJGGOMqa4i7iOiqsuA+4D7RKQF\n0AaoDawD5qnqzlDXVxS+QETVakSMMcaYVIups6qqrgIqZb1Baal73bkTPB7rI2KMMcakUixTvFdq\nvhqRoiL3GlgjYhOaGWOMMclTbQORwkL3GqxGZMuW5JbJGGOMqa6qbSBSXo2Ir2mm4na3NcYYY6qO\nqAIRcfYVkZqJKlCiBdaIBAtESkpgx47klssYY4ypjqKtERHgT6B9AsqSFIE1IsGaZsD6iRhjjDHJ\nEFUgoqoeYCFQPzHFSbxImmbAAhFjjDEmGWLpI3I38ISIHBjvwiRDJJ1VwQIRY4wxJhlimUfkOaAh\nME9EtgLb/E+q6n7xKFiiWI2IMcYYU3HEEogMiXchkslqRIwxxpiKI+pARFVHxrsQItIN+CeQBbQE\nzlXViWGu6Q48CRwCLAUeUtVR4e5lNSLGGGNMxRHTFO8iIsCZQGfvod+AyXux2F1d4EfgFeC9CO7f\nFvgIeB634m8v4GURWaGqU0JdG8nwXbBAxBhjjEmGqAMRvyDgIOAP7+EOuD4j56jqkmjzVNXJwGRv\n/hLBJTcCC1X1du/+PBE5GRgMRBSIFBVBrVqQFtBdNzPTHbNAxBhjjEm8WEbNjMAteNdaVbuoahfc\nSrxrgWfiWbgQjgemBhzLBU4Id6F/jUhgbQiASPkL3+3YAZs2RV1WY4wxxpQjlkDkNOBWVV3tO+Bd\njfc2oEe8ChZGC2B1wLHVQH0RyQh1oX+NSGBHVZ/yApF//xsaNYIxY6IurzHGGGOCiKWPSAkQ7E94\npvdchVZaOph+/Rowdy5s3gz9+kF2djbZ2dm70pQXiHz+uXsdMgQGDkxOeY0xxphkysnJIScnp8yx\ngoKChN0vlkDkE+AFEblSVX8CEJEjgf8CH8ezcCGsApoHHGsObFbV4tCXDufdd7ty553wyScwMcjY\nnPICkXnzoEULWLTI1agEa9oxxhhjKrPAL+cA+fn5ZGVlJeR+sTTN3AysAX4Qka3eSc3ycMHBLfEs\nXAgzgZ4Bx073Hg9r587QgUSwQGTtWli5Ei65BDwe+P33qMtsjDHGmABRByKqul5V+wCHA1d5tyNU\nta+qboilECJSV0SO8NasALT37rfynn9ERPznCHnBm+ZREekkIjcBFwJPRXK/HTtcZ9Vo+oj8/LN7\nvfhi9zpnTkQfzRhjjDEhRNU0IyI1cfN9XKCqvwK/xqkcRwOfA+rdnvQeHwVcjeuc2sqXWFUXi8hZ\nwHBcLcyfwDWqGjiSJqji4tA1IvvsA+vWlT3266+QkQHHHQfNmlkgYowxxsRDVIGIqu4UkcbxLoSq\nfkGI2hlVvSrIsS9xM7FGragofI3I4sVlj61cCfvtB+np0LmzBSLGGGNMPMTSR2QkcKuIxHJthVBU\nFH0fkTVrYN993fv27fcMVIwxxhgTvVhGzXQCzgJOF5Gf2HP13QHxKFgi+WpEGpdTt1NeZ9Vmzdz7\n/feHqRE1AhljjDEmlJjWmqHsMN1IpmSvUHw1ItF0Vl27Fg45xL3ff3/XVFNa6ppqjDHGGBObaDur\nCvB3YJOq7khMkRLPVyMSbdNM9+7u/f77uyBk7Vo3r4gxxhhjYhNtPw/BjVBpl4CyJE0kNSLFxW6+\nEZ/AphmA5csTW05jjDGmqosqEFFVD7AQqJ+Y4iRHJDUiANu8vV8KC10Nia+zqgUixhhjTHzEMvLl\nbuAJETkw3oVJlkhqRGB388zate7VVyPSrJnrG2KBiDHGGLN3Yums+hzQEJjnnd49cNTMfvEoWCJF\nMnwXyg9E0tOhZcv4BiIej+t3UrNm/PI0xhhjKrpYApEh8S5EMolENqEZ7A5E1qxxr76mGXDNM3sT\niBQWwujRMG4c5OXBli3uePv2kJXlppI/+2xbWM8YY0zVFnUgoqojE1GQZMnIcAFGSUnsNSLgApEV\nK2Irw6RJcN117vo+feDee6FJE1CFuXPhiy/goovc/e68E268sfygyRhjjKnMYppHRERaA5cDHYDb\nVXWtiPQE/lTVefEsYLzVqgWbNrn3odaaAdi82b2uXw9165ZNv//+8Nln0d//scfgjjtcAPLZZ3DQ\nQcHTzZsHTzwBt98Ozz4LL70EPQPXGzbGGGMquag7q4rIicBsoA8wAPD+2eZ44F/xK1piZGTsDkTK\nq2Vo2NC9+tKtX7/nLKyxNM08+6wLQu65Bz75pPwgBKBTJxd8zJ4NbdpAr15wyy1u5WBjjDGmqohl\n1MxjwIOq2g3w/7M4FTgh1oKIyN9EZJGIFIrILBE5JkTaK0TEIyKl3lePiGyP5D4ZGbBxo3tfXo1I\nRoYLUnyByIYNrunE3/77u/PbI7orvP023Hwz3HYb/OtfkBbhk+/YEaZNgxEj4IUX4LTTYm8SMsYY\nYyqaWAKRI4DxQY6vBpoFOR6WiFwCPAk8ABwF/ATkikjTEJcVAC38tjaR3Mu/aSZUv4uGDUPXiOzn\nHRsUSa3I0qVw7bVwySWuaUainBQ/LQ0GDYIvv4QlS1xn1m++iS4PY4wxpiKKJRDZDOwb5PjhQKzf\n1QcDI1V1tKrOBW4AtgNXh7hGVXWtqq7xbmsjuVEkNSLgAhFfuvJqRCB8IKIK11wD9eu7Go1Ia0KC\nOf54N8KmfXvo0QM+/jj8NcYYY0xFFsufxbeBf4tIY0ABFZEs4AlgbLSZiUhNIAuY5jumqkr4pp56\nIrJYRJaKyAci0iWS+8VSI7JhQ/A+IhC+meTVV91Kva+8srvvyd5o3tzl16sX9O8Pr72293kaY4wx\nqRJLIHInbr2ZVUBd4DfgW1xzytAY8msKpOOadvytxjW5BDMPV1vSD7gU9zm+FpGwk6nVqhVZjUij\nRmWbZgJrROrVc7UcoWpEiothyBDIzobTTw9XssjVrg3vvutqWq6+2o2uMcYYYyqjWOYRKQIuE5Gh\nuOaYekC+qv4a78KFKMMsYJZvX0RmAnOA63H9TMoVTdOMr7YjWI0IuFqRP/8sP4+XX3Z5PBCyRLGp\nUcM19TRrBv/8p/tMDz4Yff8TY4wxJpVimkcEQFUXAAviUIZ1QCnQPOB4c1ytSyRlKRGRH4Cw69/M\nnTuYoqIGgJtUrFYtyM7OJjs7u0y6hg3ht9/ccNktW/asEQFo2xYWLQp+n6IiePhhuPRSNxQ3EURc\n8NGggZtvZNMmN7pmb/qhGGOMqd5ycnLIyckpc6ygoCBh94s5EIkXVd0pInlAT2AigIiId/+ZSPIQ\nkTTgMCBs981jjhnOpEldATek1jd5WSBf04yv9iRYjUiHDvD558GvHz0aVq2C++6L4APspX/+0wVO\n11/vJmF79VVbs8YYY0xsgn05z8/PJysrKyH3qyjfnZ8C/ioil4vIwcALQB3gdQARGS0iD/sSi8h9\nItJbRNqJyFHAm0Br4OVwN6pVa/f7SDqrrl/v9oPViLRvDwsXupExgV58Ec48M/SkZfH017+6dWvG\nj4cLL3Q1MsYYY0xFl/IaEQBVfcs7Z8gwXJPMj0AfvyG5BwAlfpc0Al7EdWbdCOQBJ3iH/oaUkeFe\n09NdP4vyNGwIBQW715kpr0aksNDVfLRsuft4fr4bZjthQrjSxNfFF7sangsucEHQhAnl1/gYY4wx\nFUGFCEQAVPV54PlyzvUI2L8VuDWW+/hqRMItIucbartwoXsNViPSoYN7/eOPsoHISy+5Cc/OPDOW\nEu6dvn0hN9et3Nuzp1tgL1jZjTHGmIogpqYZEaknIqeIyIUicrH/Fu8CxpsvEKlTJ3S6Ro3c648/\nutE1TYPM8dqunXv1BSsA27bBm2+6YbWhalwSqVs313dl8WI47jj4NWnjmYwxxpjoRP2nUkTOwE1c\n1hC31ox/DwkF3opP0RLD1zRz3HGh0/lqRL7/3vUFCTYSpU4dV/Mxz2+94bfegq1b3RwfqdS1K8ya\nBeed52Zkfe01uOii1JbJGGOMCRRLjch/cGvNNFHVTFWt7beFqWdIvRJvT5M+fUKna9/evX7zze4m\nmGCOOQZmzty9/9JLbvKytm33qphx0b49fP019Ovn+o/ceKMbimyMMcZUFLEEIq2Ax1V1Y7wLkwxL\nl7rXcDOdNmrk/pCXlu4OSoLp1s0FIjt2uGacmTPdCJaKom5d11T0/PPwxhtw2GGu1ibYSB9jjDEm\n2WIJRD4Djox3QZLlhhvg/vvhwLBTn7lVbiF0jUi3bm6obF6em2q9TRu3BkxFIuJqQ37+GQ45xK0C\nfMwxLjCxYb6mIli71i2XYAGyMdVPLN0p3waeEJGOwC/ATv+TqvppPAqWKK1bw7nnRpY2K8tNehYq\nEDnqKLfmzJ13wldfwZNPpq6Tajjt27sVe6dPdzOyXn45DBrkRtd06wadO7s+L3XquFFFIq4pq6TE\n1QwFvg88lpbmJlKrWdN1CvZ/rVnTPZdwU9Dv7flI80hLi+7VJMbSpW6G49xct3/YYe7/UO/eqS2X\nMSZ5YvmT+br39eEg5xS3gF2VcNJJ7g9RlxDr+tas6VbWvegiN1z3xhuTV75Yde/utvnz3QRon34K\nd99ttSOhiEQeuNSs6QK5wK1uXTf6qlmz3VurVi4AbNGi+gU8y5bBKaeAxwOvv+7mvHnmGddsevfd\nMHRoxQ3qjTHxIxplXaiIZIQ6r6rFe1WiBBGRrkBeXl4eXbt2jfi6ZcvcH4tw5s51NQ7+M7dWJh4P\nLFniqsi3b3cbuD8ENWrsngAu8L1vPz3dVavv2AE7dwZ/LSkJXYZwP4qR/KhGkodv83ji/+rxuM9b\nWFh2Kypyo6nWrXPPeO1aNx2/T8OGbiRX795uZtw2bcJ/1sqssNAF+hs2wP/+t/v/mMcDjz0G997r\nzo8bV3aOHmNMavhN8Z6lqvnxzDvqQKSyijUQMSZRiotd8Dd7tltg8csv3VZc7AKS22+HHj0qT02J\nx+Newy26qAoDB8L777tRXUcG6XH25Zfwl7+4PJ9/3g1DryzPwZiqKJGBSESdVUXkOl9NiPd9uVs8\nC2dMVZaRAR07uj5L99zj+kmsXQsvv+zWOOrVy/XdmTIlMZ04P/kEDj3U5b+3vvrKrTLdrJkLHEKV\n96GHYOxY1xwTLAgB12Tzww+uU7VvyQL/YfLGmCpEVcNuwErcvCG+9+VtKyLJLxUb0BXQvLw8Naai\n83hUP/5Y9ZhjXEPSCSeoTp7sjsfDTz+ppqerNm7stkWLVEtLVefMUV2/Prq8Vq1Sbd5c9fjjVa+5\nxpX3yitVi4r2/EzDh7vzQ4dGlrfHo/rBB6odO7rrjj5a9dFHVX/+WXXnzujKaYyJXV5enuL6gXbV\nOP99tqYZYyowVZg8GYYNczPlHnecqz0566zwTSDlKSlxI6VWr4YvvnAz7zZo4EZMTZrkRoHNnBm6\nk7aPx+NqK374AX76yXW6feMNN5fOfvu5oeKtW7sFJCdMcJ/hn/+ERx+NrqnF43E1OK+84mqOCgtd\nB+AjjnBrGJzVAAAgAElEQVQ1Mfvv77aGDd2or7p13XmPx43o8m0lJaH7Me3Y4dJlZu7Z2diXb7DX\nmjWt6agymTHDrZD+3HO2MGikEtk0Y33STULl5OSQnZ2d6mJUWiJuIcMzznBNKEOHuplyO3SAm2+G\nq65ygYO/UM+8tBSuuML1zcjNhebN4b33IDvbLWfwxhsuSOjbFz74wA1PB9cZ+5df3B/dAw5wHUi3\nbYN//cvlk5vrghCAyy5zTS6PPw5jxsDKle6644936cJNJhhMWppbyPHss11H6m+/datc5+e7JRY+\n+8zdJ1yH6GBEXDOZb7h5errrXFxY6AKUyPLIYZ99sqlde/dwdf9h64HHgm0VIV2swW0q+P+cz5/v\nJpS88MI9P4Oqm8SxRw/XdAhu+oLcXFizxgXfgUGkxxP9s1i82M0npeqaPDt1suA0UjHViIhIc+As\noDVQZpyIqt4dU0FE/gb8A2gB/ATcrKrfhUh/ETAMaAvMB+5U1Ukh0luNSAr069ePiRMnproYVco3\n38DTT7s5bjIz3dDxiy5ytRy1apX/zD0eN2fHa6+50SiBaw+pul+cy5a5P/g//+xGgu3c6Y4Fk5Hh\nvllefnkCPmiUPB4XQGzf7oKkwkL3x8Q3qistzf3RrVVr91azpjtXnpISl8/27e5127bd+ftGl23b\nBk8+2Y/LL5+4K3gJ3EpKgh/fm3SlpfF/hv5zAWVkuC0zc/f7aI7Fel2tWrtfa9VyZVJ1geb27W6x\n0fR0OP30fvToMZHDD4d//9uNvurZ0/Wx+uc/XWD88MOuFu70010QMnKkC7KbNnVz1sya5TpNd+zo\nJrmsVQtGj3ZB/umnwwsvhF+9/Jtv3HDzzz4re/zgg12H6+xsl39lV6FGzYjIqcCHwGpcEPA7btr3\nUmC2qp4YdSFELgFGAdcB3wKDgYuAjqq6Lkj6E4EvgDuAj4FLve+PUtXZ5dzDApEUsEAkcVascEFA\nTo77RugbArxgQT+uumoiGRllh1dPnepqOUaNcrUWoRQVwUcfuV+yaWlw8slw4onu+J9/uj8KGRnu\nfo0bJ+fzVmSp+Dn3eMIHLpEENsHS+Jqpiovdv3lx8Z5bsOPlpY20ZikYX41NYaHbr1fPN0y+H2lp\nEyn2Thhxxx2uE/S6dS5tjRrus7Vo4Zbs6NTJ/fxnZbmai19/hQEDXMANLjC57joXhPTv75pvWrSA\n6693I9vmznX3Pu449/+hdm03+d7bb7tr77rLBUJpae7/zfjx7n5btrhFSM8809VkNm68e14ikT2n\nE/B/v2OHu37zZreJ7G4mrF27bBCXmek+c2BTZGnp7qkFfJuqK6dv8wXqvs1XBv+8mjbNp0+fihOI\nzAS+UNU7RWQLcASwAXgTeE9VX4m6ECKzgG9U9e/efQGWAc+o6mNB0o8D6qhqv4By/aCqN5VzDwtE\nUsACkcRTdc0mH3zgmiw++6wf++wzkaKisr+M2rWDBx6ASy9NdYmrHvs5D83jiTyY8QVA/q87dri5\nderUcc1xpaUwcmQ/vvpqIjk5Lmj44AM3L83557vA4O9/d00y998P//2vCzLGjHE1gj16uL5Wv/wC\n333n+hdde61bZuD88+Gdd1zgccUVLmg5+GCX56ZNrhaloMB9rv33d808l10WvGatsND1bfKVcfXq\n6J9dWprrx+Lry+JfQ5dMzz+fz003VZxAZDOu1+wCEdkInKyqv4nIUcC7qhpiibig+dUEtgMXqOpE\nv+OvAw1U9bwg1ywBnlTVZ/yODQH6q+pR5dzHApEUsF/QyWfPPPnsmSdfpM985crIZi7evt0FIh06\nlO0fUlpaNsjweNy8P4WFrrN0RsgpPssqLHQ1G/4TK/rPzBz4vmZN1yE6WNl9NSaBNU++CSf9X9PT\nd+ft+2z+kzD6Nl/th39Nia+2ZPbsfI49tuJ0Vi30u24V0B74DSgB9o0hv6a4aeEDY8XVQKdyrmlR\nTvoWIe6TCTBnzpwYimhiVVBQQH5+XH9mTRj2zJPPnnnyRfPMV66MPN8ff4wsXY0aLiCpLubP3/W3\nMzPeeccSiHwLnAjMBXKBx7wL4F0ElNu5tAJoCzBw4MAUF6P6yfItY2ySxp558tkzTz575inRFvg6\nnhnGEoj8A6jnfX8/0BC4Htdp9ZYY8luH6+jaPOB4c1yNSzCrokwPLmi6FFgM2PJuxhhjTOQycUFI\nbrwzjqqPiIikA1nAXFXdHC59FPkG66y6FNdZ9fEg6ccBtVW1v9+xr4CfyuusaowxxpiKJ6opW1S1\nFPgfrl9HPD0F/FVELheRg4EXgDrA6wAiMlpEHvZL/zRwhojcKiKdvB1Vs4Bn41wuY4wxxiRQLE0z\ns3HzhiyMVyFU9S0RaYqboKw58CPQR1XXepMcgOsM60s/U0QGAA95t99xI2aCziFijDHGmIopluG7\nvYGHgbuAPGCb/3lV3RG30hljjDGmSoslEPF43wa9UFVDTJhsjDHGGLNbLEsc9fVuZ5azVTgi8jcR\nWSQihSIyS0SOSXWZKisR6SYiE0VkuYh4RKRfkDTDRGSFiGwXkSkicmDA+UYi8qaIFIjIRhF5WUTq\nJu9TVB4icpeIfCsim0VktYi87x0u758mQ0SeE5F1IrJFRN4RkX0D0rQSkY9FZJuIrBKRx0SkEi1x\nljwicoOI/OT9+SwQka9F5Ay/8/a8E0xE7vT+fnnK75g99zgSkQe8z9h/m+13PmnPO+ILROR+Eamj\nqrmhtmgLkGji1rF5EngAOAq3oF6ut0+KiV5dXB+emwhSKyYidwCDcOsGHYtrussVEf/FEccCnYGe\nuMUTTwFGJrbYlVY3YARwHNALqAl8KiK1/dL8B/ccL8A9y/2Ad30nvb8YPsH1CTseuAK4Etcny+xp\nGW7tqq64TvCfARNEpLP3vD3vBPJ+UbwO97vanz33+PsV1y+zhXc72e9c8p63qka04eb62DfS9BVl\nA2YBT/vtC/AncHuqy1bZN8AD9As4tgIY7LdfHzcb78Xe/c7e647yS9MH1xm5Rao/U0XfcCPWPLil\nFXzPtxg4zy9NJ2+aY737fYGdQFO/NNcDG4Eaqf5MlWED1gNX2fNO+HOuB8wDegCfA095j9tzj/+z\nfgDIL+dcUp93NFUoYWbqr3i869hkAdN8x9Q9ranACakqV1UlIu1wUbX/894MfMPu5308sFFVf/C7\ndCquduW4JBW1MmuIe1YbvPtZuG8k/s98Hm4eHv9n/ouWXck6F2gAHJLoAldmIpImIn/BTScwE3ve\nifYc8KGqfhZw/GjsuSfCQd5m9j9EZIyItPIeT+rPebRtOdH1bE29UOvYhFqXxsSmBe5nJNTzbgGs\n8T+pbn6aDdi/SUjeif7+A8zQ3UPVWwA7dM8JBgOfebB/E7BnHpSIHCpudfFi4HncN8O52PNOGG/A\ndyRuRGag5thzj7dZuKaUPsANQDvgS29/vaT+nEc7j8h8EQkZjKhq4yjzNMZE5nmgC2XbcU1izAWO\nwH27uxAYLSKnpLZIVZeIHIALsnup6s5Ul6c60LJ9On8VkW+BJcDFJHkZlGgDkQeAgkQUJEFiWcfG\nxG4VrgmvOWUj5ebAD35pAntepwONsX+TconIs7hRad1UdYXfqVVALRGpH/Dtxf9nfBUQOFKsud85\nE0BVS9g9aeMPInIs8HfgLex5J0IW0AzI99b8gavNPkVEBgFnABn23BNHVQtEZD5wIK65PGk/59E2\nzYxT1VGhtijzSyhvZJ2HG50B7Kre7kmcVw80oKqLcD+A/s+7Pq7vh+95zwQaishRfpf2xAUw3ySp\nqJWKNwjpD5ymqksDTufhOvr6P/NOQGvKPvPDAkaKnY77UmGzEUcmDcjAnneiTAUOwzXNHOHdvgfG\n+L3fiT33hBGRekAH3ICD5P6cR9HDtrKOmrkY2A5cDhyMGya6HmiW6rJVxg03fPcI3C8MD/B/3v1W\n3vO3e5/vObhfLB/gpuCv5ZfHJ7hfLMcAJ+F6yb+R6s9WETdcc8xG3DDe5n5bZkCaRUB33DfLr4D/\n+Z1Pww2FnAQcjmsTXg38K9WfryJuuJmjuwFtgEOBR3C/lHvY807qv8OuUTP23BPyfB/HDcttA5wI\nTPE+rybJft7RFNpTGQMRb9lvAhbjhpHOBI5OdZkq6wac6v1ZKA3YXvVLMwQXVW/H9aI+MCCPhrhv\nOgXeP7IvAXVS/dkq4lbOsy4FLvdLk4Gba2QdsAV4O/D/Km59qI+Ard5fFo8Caan+fBVxA17GNcsU\n4mr4PvUFIfa8k/rv8FlAIGLPPb7PNwc3lUUhbjTMWKBdKp531FO8G2OMMcbEi019a4wxxpiUsUDE\nGGOMMSljgYgxxhhjUsYCEWOMMcakjAUixhhjjEmZlAciInKXiHwrIptFZLWIvC8iHcNcc62IfCki\nG7zbFO/S0cYYY4ypRFIeiOAmDhqBm32zF1AT+FREaoe45lTcmOfuuBUAl3mvaZnYohpjjDEmnirc\nPCLe6WLXAKeo6owIr0nDTYz1N1Udk8jyGWOMMSZ+KkKNSKCGuKXkN0RxTV1cTUo01xhjjDEmxSpU\nIOJdkO4/wAxVjWbRnEeB5biFk4wxKSIiHhHpl+pyREpEFonILakuhzHVWY1UFyDA80AX3EJoERGR\nO3EL252qqjtCpGuCW5RnMVC0d8U0psJ5ALfQoOJWMsb7fiaQ7D+07UWka5LvGatawAGVqLzGpEom\n0BbIVdX18cy4wvQR8S51fg7QTfdc6ry8a/4B3A30VNUfwqQdALy51wU1xhhjqq9LVXVsPDOsEDUi\n3iCkP65WI9Ig5HbgLuD0cEGI12KAMWPG0Llz51iLWikMHjyY4cOHp7oYCWefs2qxz1m12OesWubM\nmcPAgQPB+7c0nlIeiIjI80A20A/YJiLNvacKVLXIm2YUsFxV7/bu3wEM9V631O+araq6rZxbFQF0\n7tyZrl2rdi1sgwYNqvxnBPucVY19zqrFPmeVFfeuDRWhs+oNQH1gOrDCb7vYL00roEXANTWBdwKu\nuS3xxTXGGGNMvKS8RkRVwwZDqtojYL9d4kpkjDHGmGSpCDUixhhjjKmmLBCpgrKzs1NdhKSwz1m1\n2OesWuxzmkhVmOG7ieadJyAvLy+vunUsMsZUYkuXLmXdunWpLoap4po2bUrr1q3LPZ+fn09WVhZA\nlqrmx/PeKe8jYoypvFSVT//4lFPanELtmqHWqTSxWLp0KZ07d2b79u2pLoqp4urUqcOcOXNCBiOJ\nYoGIMSZmM/+cyRlvnsFZB53F+5e8T830mqkuUpWybt06tm/fXi3mPzKp45sjZN26dRaIGGMql8kL\nJlO3Zl0+/eNTrp54NaPOHUWaWNezeKsO8x+Z6st+YxhTyagqd069k/nr5+9VPpuKNrFk05K9ymPS\ngkmc0+kc3jjvDd78+U1uy72N6tLvzBgTHxaIGFPJzPpzFo9+9ShPfv3kXuVzW+5tdHutGx71xHT9\nmm1r+H7F95zR4QwuOfQSnj3zWf7zzX94ZMYje1UuY0z1YoGIMUmUuyCX88efv1d5vPmLW7vxrdlv\nUVxSHFMeqsrkPyazbPMyZiydEVMeU/6YAsDpHU4H4KZjbmLIqUO457N7eDHvxZjyNMZUPykPRETk\nLhH5VkQ2i8hqEXlfRDpGcN1FIjJHRApF5CcR6ZuM8hqzN17/6XXen/s+q7auiun6naU7eeu3tzjr\noLPYVLSJj3//OKZ85q6by4otK0iXdHJ+yYkpj8l/TObIFkfScp+Wu47df+r9DDpmEDd+fCPvzn43\npnyNMdVLygMRoBswAjgO6IVbQ+ZTESl3LKCInAiMBV4CjgQmAB+ISJfEF9eY2HjUw7SF0wDIW5EX\nUx7TFk1j7fa1DDttGFktsxjz85iY8pmycAq10mtx49E38vbst9lZujOq6z3qIXdBLn0PLBv/iwhP\n932aiw+5mAHvDeC3Nb/FVD5j9lbbtm25+uqrU10ME4GUByKqeqaqvqGqc1T1F+BKoDWQFeKyW4BJ\nqvqUqs5T1fuBfGBQ4ktsTGx+XfMra7evBSBvZWyByNhfxnJw04M5qsVRDDx8IB///jEbCjdEnc+U\nhVM4sdWJXNP1GtYXrmfqwqlRXZ+/Mp+129dyxoFn7HEuTdJ4rf9rdGjUgasmXEWJpyTq8pmqb+bM\nmQwdOpTNmzcnJP+0tDREJG75TZo0iaFDh8Ytv0SbM2cOQ4cOZenSpakuSlgpD0SCaAgoEOq36wlA\n4G/OXO9xYyqkaQunkVkjk26tu8UUiGzfuZ33577PgEMHICL85dC/UOIp4Z3Z70SVz87SnUxfPJ3e\n7XtzRPMjOLjpweT8Gl3zzOQFk6mfUZ8TDgj+Xy6zRiav9n+VvJV5DJ85PKq8TfXw9ddfM2zYMDZt\n2pSQ/OfNm8eLL8avr9Inn3zCsGHD4pZfos2ePZuhQ4eyePHiVBclrAo1j4i48PU/wAxVnR0iaQtg\ndcCx1d7jphrweGBndK0JKTflj2mcsP9JZLU8hrG/jqY4yn6m7835kK07tnJBp2yKi6FRzRb0anc6\no358gysOvS7ifL5a9g1bd2zl1Fa92bFDuOjgbIZ/+zibthZGPDvqJ79PpkebXnhKalJcToXHUc2O\n55ZjBnPf5/dxRrt+dGzSCYCaNSGtIn4FMkkVzTBvVWXHjh1kZGREfE3NmvGdXC8Rw9Jj+VzR5B1t\njdCOHVBcDDVqQHp63ItUPlWtMBvwX2Ah0DJMumLgkoBjNwIrQ1zTFdC8vDw1lV+XLqpQiba0Hcpd\n9ZSTH1a6vK0MQam3Mro8/tJPufa4sscOG+Pyargw8ny6P6Dc0UiRErffeL7Lo8vbkV2fuUG5P03p\n+mL4tDW3KTcfqFx90q77nXRSqn96Ko+8vDytir+3hgwZoiKiaWlpKiK73i9ZskRVVUVEb775Zn3z\nzTf1kEMO0Vq1aumECRNUVfXxxx/XE088UZs0aaK1a9fWrKwsfeedd/a4R5s2bfSqq67atf/666+r\niOhXX32lgwcP1mbNmmndunX1vPPO03Xr1oUs75VXXhm0vD6RlinU51q/fr0OHDhQ69evrw0bNtQr\nr7xSf/rpJxURHTVqVJl85s6dqxdccIE2btxYMzMz9eijj9aJEyfu8VkDy/vFF18E/Xy+nzPIU1B9\n5ZVQaeiqcf7bX2FqRETkWeBMoJuqrgyTfBXQPOBYc+/xkAYPHkyDBg3KHMvOzrYVFCsRjwfmzIFr\nroHu3ZN33yXFP9KsRjvqpDcInzjA/KLv+NfyrQy5oif7pDfjtqVw2xN5HFn3rIiu31q6gUGLJ5Hd\n5An6vLH7eJHnXAYtrss5w8bSv9E9EeU1bPkUGqb34JbRvq88B3H/n1k0uSqHv7e4MOz132ydyrOr\nPQwf1IemYb901mFe4as8uOIUBj7zLKVf/53JkyMqpqnCLrjgAubPn8+4ceN4+umnadKkCQDNmjXb\nlWbatGm89dZbDBo0iKZNm9K2bVsAnnnmGfr378/AgQPZsWMH48aN4+KLL+ajjz6ib9/dnafLqw24\n+eabady4MUOGDGHx4sUMHz6cQYMGkZNTfvPkDTfcwIoVK5g6dSpvvvmm78vtLpGWqbzPpaqcffbZ\nfP/999x000106tSJCRMmcMUVV+zxOX777TdOPvlkDjjgAO666y7q1q3LW2+9xbnnnst7771H//79\nOeWUU7jlllsYMWIE9957LwcffDBA2GUC7hm6lYPbw9q1OfTrV/Z5FBQUhLx2r8Q7sollA54FlgHt\nI0w/DpgQcOwr4PkQ11iNSBVRUOC+bY8bl7x7Tls4TdOHpusNH94Q0/VDpw/VBo800JLSEvV4PNr4\n0cY6dPrQiK8f+f1ITRuapqu2rNrj3GXvXaadRnRSj8cTNp9NhZs0fWi6vvDdC2WOP/7V45rxrwzd\nVLgpbB5Xf3C1dnmuS8RlV1Ud9PEgrf1gbR02YoGmp6tGUFSjVbdGRFX1iSeeKFML4k9EtEaNGjp3\n7tw9zhUVFZXZLykp0cMOO0x79epV5njbtm2D1oj06dOnTLpbb71Va9asqZs3bw5Z3kGDBpWpBYml\nTOV9rnfffVdFREeMGFHmeM+ePTUtLa1MjUjPnj31yCOP1J07d5ZJe9JJJ2mnTp127b/zzjsha0H8\n+X7Ozh9+ftg0JKBGJOUttSLyPHApMADYJiLNvVumX5pRIvKw32VPA2eIyK0i0klEhuBG2TybzLKb\n1PB1sm8QfcVETP7Y8AcXvX0R6WnpfDj/wz2+DUVi2qJpnNbuNNLT0hERslpmRdVhdewvY+nVvhfN\n6wVWBMLAwwcyb/28iPL7YskXlGopvdr3KnP8kkMuobi0mA/mfhDyelU3EVrgsN1wHun1CM3rNWfc\n9msp9XiwxWTjb/t2yM9P/Jasf7vu3bvTqVOnPY7796fYtGkTGzdupFu3buTnh1+ZXkS47rqy/am6\ndetGaWkpS5bEvtxBNGUK9rlyc3OpVasW1157bZnjf/vb38r8vtm4cSOff/45F110EQUFBaxfv37X\ndvrpp/P777+zcmW4BoXyvTfnPT5b9FnM18eqIjTN3ICLsqYHHL8KGO193woo9Z1Q1ZkiMgB4yLv9\nDvTX0B1cTRXhqyFMRiCyuXgz/cb1o3Htxrx49otc+PaF/LDqB7q2jHwBsm07tjFz2Uye6vPUrmNZ\nLbN44+c3Qly127KCZXyx5Ate7/960PM92vWgRb0WjPl5DEfvd3TIvKb8MYV2DdvRoXGHMsdbNWhF\nt9bdyPk1hyuOvKLc639d8ysrtqwIOmw3lHq16vHyOS/T641ekPUiBQU3ULduVFmYMObOhaxQkx7E\nSV4eJGP9PV9TTKCPPvqIhx56iB9//JFivx7faRH2gG7VqlWZ/UaNGgHuj3ysoilTsM+1ZMkSWrZs\nSWZmZpnjBx54YJn9BQsWoKrcd9993HvvvXvkIyKsWbOGli1b7nEuEl1bduXaidfy840/U69WvZjy\niEXKAxFVDfvTo6o9ghx7F7CpG6shXyBSv35i71PqKWXgewP5c/OffHPtN3Ro1IEGGQ34cN6HUQUi\nM5bOYKdnJz3b9dx1LGu/LP791b9ZtXUVLeqFHuw17tdxZNbI5LzO5wU9XyOtBgMOHcCYX8bwxOlP\nUCOt/P/WUxdN3aM2xCf70GxunnQza7etpVndZkHTTFowiTo163By65NDljmYnu17ckbLK5h8yoMU\nFNzAfvtFnYUJ4eCDXZCQjPskQ+3ae47g+t///kf//v3p3r07//3vf2nZsiU1a9bk1VdfDdnHw196\nOcNBYqnpjKVMwT5XpDwety7UP/7xD/r06RM0TWDwEo37T72f7K+zGf3TaG465qaY84lWygMRY6KV\nrBqR+z6/j4/mf8THAz7m4Kbut2/fg/oycf5EHuj+QMT5TFs0jZb1Wu7KA1yNCLgZVs/qGLrD6thf\nx3JOx3Oon1F+5DXw8IE8Nesppvwxhb4HBW82+XPzn8xdN5dh3YPPhXBhlwu5edLNvD377XJ/CU1e\nMJnT2p5GZo3MoOfDOXX/3kxeOYoV6zfTmQRHktVMnTrJqamIl1gmG3vvvfeoXbs2ubm51Kix+8/X\nK6+8Es+iBVVeeeNRpjZt2jB9+nSKiorK1Ir8/vvvZdK1b98ecEOTe/TY4/t5ROUNpVWDVnx/3fd0\nbhq6U2u8pbyPiDHRiiUQ2bZjW1T3GPvLWB6Z8QiP9X6szB/2czqeQ/7KfJZvXh5xXlMXTqVn+55l\nfjG0bdiWRpmNwvbrmL12Nj+u+pFLD7s0ZLojWxxJl2ZdGPNL+VO+T/ljCoLQo13wX2DN6jajd4fe\n5U5utqV4CzOWzoi6f4i/Q1u6tvHfVs+LOQ9TNdT1ts1FM6FZerrrY1VSsnvymsWLFzNhwoS4ly+Q\nr7yBM8HGo0x9+vRhx44dvPTSS7uOqSrPPfdcmd8bzZo1o3v37owcOZJVq/YcJLpu3boy5VXVqCeM\n69KsS1xnpI2EBSKm0tm82U2IVS/CJszJCyaz7xP7sm77uvCJge+Wf8c1E6/hssMv47YTbitzru+B\nfUmXdD6a/1FEea3fvp4fV/1Ir3Zlm0NEhKz9wndYHfvLWBpmNgzbJ0NEuOzwy3h/zvtsLAze1j11\n0VS6tuxKkzpNys0n+9BsZiydwdKCPaeF/nzx5+z07Iy6f4i/Iw5w61n+vsECkeouKysLVeXuu+9m\nzJgxjB8/nsLCwpDXnHXWWWzbto0+ffowcuRIhg0bxvHHH89BBx0U0T3La36JpFnGV96bb76ZsWPH\nMn78+LiUCeDcc8/l2GOP5bbbbuOWW27h+eefp2/fvruCCP/A4LnnnkNVOeyww7j77rt5+eWXeeih\nhzj77LPp3bv3rnRHHnkk6enpPProo4wePZrx48eXCVQqEgtETKVTUOD6h0QatOcuyGX7zu38b8n/\nIkp/57Q76dy0My+e8+Ie3wwa1W7Eya1P5sP5H0aU1+eLP0dRerbvuce5rJZZIRe/K/WUMubnMVzY\n+UIyaoSfefHyIy4no0YGZ409iy3FW8qc86iHqQun0rt973Kuds49+Fwya2QyOHcwr/7wKp8v+pxF\nGxdR4ilh8oLJHNj4wD06ukZj/6b1YUtLFm2xQKS6O/roo3nwwQf5+eefueqqqxgwYABr17q1mEQk\n6Lfy0047jVdffZXVq1czePBgxo8fz2OPPca55567R9pgeZT3TT+SGoDzzz+fW265hdzcXC6//HIG\nDBgQlzKB69T6ySefcMkllzB69GjuvfdeDjjgAJ599llUtUxzTefOnfn+++85++yzGTVqFIMGDWLk\nyJGkp6fzwAO7m4ybN2/OyJEjWbNmDddeey0DBgxg9uwKOp4j3uOBK+qGzSNSZdxzj2rr1pGnP+bF\nY5Qh6P9N+r+waQt3FmrGvzJ0+Mzh5aZ58usnNeNfGbq1eGvY/G748AbtOKJj0HNv/+ZmWA02N4iq\n6vO1QaIAACAASURBVCfzP1GGoLOWzQp7H59v//xW6z9SX09+9eQy5ftp1U/KEHTqH1PD5vHQlw/p\nfk/u52Zb9W7pQ9O1xrAaevMnN0dclvKkX91dD3/wor3OpzqoyvOImPDef/99TUtL06+//jqh94nk\n56xKzyNiTLQKCiLvH7J953Z+WPUDdWrW4YslX4RNP+vPWRSXFnNa29PKTXNOx3MoLi2OaMXaaYum\nlRkt429Xh9VymmdG5o3kiOZHcOz+x4a9j88x+x9D7sBcflz1I+fknMP2nW7Shyl/TCGzRiYntT4p\nbB53d7ub5bcup/CeQuYNmkfuwFyeO/M57jzpTv7v+P+LuCzlydzWiVU7rUbEGH9FRUVl9j0eDyNG\njKB+/fp0rUy9kGNgo2ZMpRNNIPLt8m8p8ZTwt2P+xjPfPENBUQENMsu/ePri6TSu3ZjDmh9WbpqD\nmhxEpyad+HD+h/Q/uH+56ZYWLOX3Db/zSM9Hgp7f1WF1RR5nHnRmmXPLNy/no/kfMaLviKg7jh1/\nwPFMunQSfcb04dxx5zIxeyJTFk7hlDanRDXaJbNGJh2bdKRjk45R3T+cesWdWM9oPOohTey7kDHg\npp4vLCzkhBNOoLi4mHfffZdZs2bxyCOPJGRRvIrEfguYSmfz5sgDka+WfkWDjAbcePSNKMpXy74K\nmf7zxZ9zaptTw/6B7NepHx/N/wiPespNM23hNAThtHbBa1dCdVh95YdXyKyRyaWHhx4tU56TW5/M\nxwM+ZsbSGZw3/jy+XPLlHh1mU6WxpxMlUsiygmWpLooxFUaPHj2YN28e9957L/fccw+bN2/m2Wef\n5fbbb0910RLOAhFT6fg6q0ZixrIZnNDqBDo26UiLei34csmX5aYt3FnIrD9n0b1t97D5ntPxHFZv\nW813y78rN820RdPo2rIrjWs3LjdNVsssvl/xfZljpZ5SXs5/mexDs0POHRJO97bdmZg9kc8XfU5h\nSSG9O4TuqJoszcQN4Z233ppnjPHJzs7mu+++Y+PGjRQWFvLLL79w4403prpYSZHyQEREuonIRBFZ\nLiIeEekXwTWXisiPIrJNRFaIyCsiUv5ve1OlRNo041EPM5fN5KRWJyEinNrm1JCByMw/Z7KjdEfI\n/iE+J7Q6gca1G5c7ekZVQ/YP8clqmcXyLctZvXX1rmOTFkxi2eZlXH/09WHLEU6v9r34MPtDrs+6\nnsObH77X+cVD88y2iKcW89ZZIGKMqQCBCFAX+BG4CdcjNyQROQkYBbwEdAEuBI4FXkxgGU0FEmkg\n8tua3ygoLtg1HfkpbU7huxXflTu52fTF02lSuwmH7HtI2LxrpNXgrIPOKjcQmbZoGqu2rgo6bNdf\n1n57dlgdmTeSri27hl03JlK9O/TmhbNfqDD9MRo1SCdj24FWI2KMASpAIKKqk1X1flWdAETSK+94\nYJGq/n975x0eVdH98c9sKqn0npAEBARfKQFpoYOFpqKigK8ICmL5qaC+YkPEgh2wIEVEsERBUAFR\nEaUGpCQoCggoJaGHlkAgkGTn98fdxNTdTbKbLZzP8+yjO3funTPcvTffOXPmzPta6wNa6/XADAwx\nIlwG2BsjkpCSgK/JN2/VSZcGXcg2Z/PrwV+Lrb9y/0q6RXWz+w92/8b92XZsGwfOFNy1c2biTPp8\n1oe4yDi6Nuhq9RrRlaPzAlbB2OBu2Z5l3Bdbfm+IuxIeDj6nm4gQEQQBcAMhUgY2ABFKqRsAlFK1\nMLwi37nUKqFC0Np+j0hCSgKtarciyC8IMFIXV61UtdjpmfNZ59l4cKNd8SG5XNfoOvxMfnlekczs\nTEYuHsl9S+9jVOwofr7rZ5uJyAoHrH6Y9CFBfkEMvmqw3XZ4GuHhoE80kakZQRAADxQiFg/IncCX\nSqlLwBHgDPCQSw0TKoTMTMjKsi9YdV3yOjpF/Js3w6RMdGnQhTXJRYXI+pT1ZJmz7IoPySUsIIyu\nUV1ZsnsJB9MP0vXjrnyy7RM+GvAR7/V5D38ff7uuE1vHECLZ5mw+3PohQ/8zlNCAULvt8DTCwuDS\n4SakpKeUeg8gQRC8D48TIkqpZsBUYAJGttTrgGiM6RnBy7F3w7vDZw+z/8z+Igm8ukR2MZKWZV8s\nUL5q/ypqBNWgWY1mpbJnQOMBrNy3ktiZsRw+e5i1w9cyvNXwUl0jtk4sB9MPMmfrHA6fPezV0zJg\n3Lvso8bKmT2n9tioLQiCt+OJCc3GAeu01m9bvv+plHoAWKuUekZrfczKuYwZM4bwQn/FBg8ezODB\n3usK9ybsFSIJyUa+kPweETDiRDKzM9l8eHNeECv8Gx9S2uRh/Zv0Z8yPY7iy+pXMv20+NYNrlup8\n+DdgddzP42hbty2t6rQq9TU8ifBw4KRlCe+JXbSs3dK1BgmCUID4+Hji4wvuwp2W+/J1Ap4oRIKA\nrEJlZowVNzb/ikyePNnr0+V6M7k7cNsUIikJxFSJoU5onQLlLWq3INQ/lDUH1uQJkYxLGWw6tImp\n108ttT1RlaPY/X+7iQyPxNdUtscpN2D11IVTvN7r9TJdw5MIDwcuVKVKQHUJWBUEN6S4wXlSUhKx\nsbFOac/lUzNKqWClVAulVO6wKMbyPcJyfJJSam6+U5YAA5VSo5VS0ZblvFOBjVrroxVsvlDB2O0R\nSUko4g0BY9ltXGRcgYDVhJQEss3ZpYoPyU9MlZgyixAwAlZb12lNWEAYd1x1R5mv4ynk3rvIIFk5\nIziW+Ph4pk4t/YDCUezcuZMXXniB5OTkCmnvgw8+YO7cubYrujkuFyJAG2ArkIjh1XgLSAJesByv\nDUTkVtZazwXGAg8CfwBfAjuBWyrOZMFV5AoRa8Gq5y6dY+uRrcUKETCmZ3LFBxjxITWDa9K0elNH\nm2s3z3R+hln9ZxHsH+wyGyqK3HtXx19WzgiO5fPPP3epENmxYwcvvPAC+/fvr5D2pk2b5hVCxOVT\nM1rr1VgRRFrrIpF/Wuv3gfedaZfgntgjRDYd2kSOzilxp9kuDbrw1M9PsfXIVtrWa8uq/avKFB/i\nSEraj8YbyfWI1FBNWHdyPlprl/7bC4KjkN9y2XAHj4gg2E1aGgQHg68VCZ2QnEDlwMolroBpU7cN\ngb6BrDmwhnOXzrH58OYyT8sIpSdXiFTOacK5S+c4cu6Iaw0SXMKECRMwmUz8888/3H333VSpUoXK\nlSszYsQIMjMzi9T/9NNPadOmDUFBQVSrVo3Bgwdz8ODBvOPdu3fnu+++48CBA5hMJkwmEzExMVZt\nyMnJ4cUXX6RRo0YEBgYSHR3NM888w6VLlwrUM5lMTJw4scj5UVFRjBgxAoC5c+cyaNAgALp164bJ\nZMLHx4c1a9bk1R0wYAA//fQTrVq1olKlSjRv3pyvv/662H+Xwnz88ceYTKa8aZ/o6Gi2b9/OqlWr\n8vrbo0cPq/11V1zuERGE0mBPVtWElAQ6RnQsMUOqv48/Hep3YE3yGq6qeRXZ5uxSJTITyoefH1Sq\nBKEX/105Uze0routEiqaXM/BoEGDiImJ4dVXXyUpKYkPP/yQWrVqMWnSpLy6L7/8MuPHj+eOO+5g\n5MiRpKam8s4779C1a1e2bt1KWFgYzz77LGlpaRw6dIgpU6agtSYkJMSqDffccw/z5s1j0KBBPP74\n42zcuJFJkybx119/sXDhQrv7ANClSxcefvhh3n33XZ599lmaNjWmeq+88sq8urt37+aOO+5g9OjR\n3H333cyZM4fbbruNH3/8kZ49e+bVK86rUrh86tSpPPTQQ4SGhvLss8+itaZWrVo2bXZHRIgIHoWt\nrKo55hw2HNzAk52etHqdrg26MnXjVJpUa0LtkNo0qdbEwZYK1ggPB9+zMfgoH3ad3HVZTU0JBYmN\njWXmzH+3Cjtx4gSzZ8/OEyLJyclMmDCBV155hSef/Pe5HjhwIC1btmTatGmMGzeOnj17Uq9ePc6c\nOWNXOoZt27Yxb948Ro0axfTp0wEYPXo0NWrU4K233mL16tV07Wp9i4b8REdH07lzZ95991169epF\nly5ditTZs2cPixYt4sYbbwRgxIgRNG3alCeffJItW7YUqW+NAQMG8Mwzz1CjRg2PTz8hQkTwKNLS\nrMeH/Hn8T9IvppcYqJpLlwZdmLB6AnN+m0OvmF4yr1vBhIVBRro/MQ1iJGDVQZzPOs9fJ/5yejtN\nqzfN2zahvCiluO++ggn8OnfuzDfffMO5c+cICQlh4cKFaK257bbbOHnyZF69mjVrcsUVV7By5UrG\njRtX6raXLVuGUooxY8YUKH/sscd48803+e6770olROyhbt26eSIEIDQ0lLvuuovXX3+d48ePU7Nm\n6fMQeQMiRASPwpZHJHeju7b12lq9Trv67fAz+XHi/AmJD3EB4eHGvWxSXZbwOoq/TvxF7Ezn5HnI\nT+KoRFrXcVwupsjIyALfq1SpAsDp06cJCQnh77//xmw206hRoyLnKqXw97dvK4XC5MaSFL5urVq1\nqFy5MgcOHCjhzLJTXB8aN24MwP79+0WICIInkJYGlvdUsSSkJNC6TmubI7YgvyDa1mvL+pT1Eh/i\nAvKESLUmfP3X17ZPEGzStHpTEkclVkg7jsTHx6fYcq01AGazGZPJxA8//FBsEKetOBBblMcbmpOT\nU662i6Mke5zRlrsgQkTwKNLTISqq5OMJyQnccqV9KWWub3g9x84d44qqVzjGOMFuwsONe9mkWhP2\nn9nPxeyLNncqFqwT5BfkUE+Fu9CwYUO01kRFRRXrUchPaURFgwYNMJvN7NmzhyZN/o0RO378OGfO\nnKFBgwZ5ZVWqVOHMmTMFzs/KyuLIkYIrvmy1//fffxcp27XL8AhGWV5suR6h9PR0wvLNQxeXm8Rb\nppRl+a7gUViLETl67igH0g7QMaKjXdcaFzeOpPuSvOZh9iTCwv6dmjFrM3+fKvqCFgQwglJNJhMv\nvPBCscdPnTqV9//BwcF274nSp08ftNZMmTKlQPlbb72FUoq+ffvmlTVs2DBvGW4uM2bMKOKlCA4O\nRmtdRLTkcvjw4QLLddPT0/nkk09o1apV3rRMrvDK315GRgbz5s0rcr3g4OAS2/IkxCMieBTWYkQO\nphs5BaKrRNt1LT8fP/x8/BxlmlAK8k/NAOw6uYvmNZu72CrBHYmJieGll17i6aefZt++fdx0002E\nhoayd+9evvnmG+677z7Gjh0LGCtw5s+fz2OPPUbbtm0JCQmhX79+xV736quvZtiwYcycOZPTp0/T\ntWtXNm7cyLx58xg4cGCBQNV7772X0aNHc+utt9K7d29+//13li9fTo0aNQpcs2XLlvj4+PDaa69x\n5swZAgIC6NmzJ9WrVweMeJB7772XzZs3U6tWLWbPns3x48cLZEe99tpriYyMZMSIETzxxBOYTCbm\nzJlDzZo1SUlJKdBebGws06dP5+WXX6ZRo0bUrFmT7t09MOZNa+3SD9AZWAwcwti8boAd5/gDLwP7\ngUxgL3C3jXNaAzoxMVELnkulSlpPmVL8se/3fK+ZgE4+k1yxRgml5vnnta5bV2uz2azDJ4XrV9a8\n4mqT3JLExETtre+tCRMmaJPJpE+ePFmg/OOPP9Ymk0kfOHCgQPnXX3+tu3TpokNDQ3VoaKhu1qyZ\nfvjhh/WePXvy6mRkZOg777xTV61aVZtMJh0dHW3VhpycHP3iiy/qhg0b6oCAAN2gQQP97LPP6kuX\nLhWoZzab9VNPPaVr1qypQ0JCdJ8+ffTevXt1dHS0HjFiRIG6s2fP1o0aNdJ+fn7aZDLp1atXa621\njoqK0v3799c//fSTbtGiha5UqZJu1qyZXrRoURG7tm7dqjt06KADAwN1VFSUnjp1arH/LseOHdP9\n+/fX4eHh2mQy6e7du1vtb0nY8zvLrQO01o7WAY6+YKkNgOuBicCNQI6dQuRbYD3QHYgE2gEdbJwj\nQsTDuXTJ+MXOmVP88Xm/zdNMQF/IulChdgml5+23tQ4ONv7/mlnX6GFfD3OpPe6KNwuRy41cIeKO\nuFqIuDxGRGv9g9Z6vNb6W8DmZL1S6noML0ofrfVKrXWy1nqj1npDaduelTiLnvN65m1+Jrg36enG\nf0uamkk9n0qIfwiBvoEVZ5RQJsLDISMDcnKM6ZnilvCmZqTS+5PezN8+3wUWCoJQUbhciJSB/sAW\n4Eml1EGl1C6l1BtKqVL99flg8weMWjqKX/b9wrZj25xjqeBQbG14d+L8CaoHVa84g4Qyk3sPc1fO\n7DqxK9dzCRgipMe8HqzYu4JPt33qIisFQagIPFGIxGB4RJoDNwGPALdSit14p22exgPLHuCBNg8Q\n4BNAQnKCcywVHEquECnRI5KRSo2gGsUfFNyK3HuYu3LmdOZpTpw/AfwrQlIzUhnynyGsT1mPWZtd\naK0glJ+S9pARPFOImDCCWodorbdorX8AxgLDlFI2ExHM3z6fB5c9yCPtHuG9Pu/Rpm4b1qWsc7bN\nggOwKUTOp1IjWISIJ1BAiORbOZNfhKwctpLhLYdz8sJJSQMveDx79+7l22+/dbUZboknLt89AhzS\nWp/LV7YTI76kPvCPtZNfe/Y1YurEsDdxLzdOu5FjqcfY3nA7+hYtatXNsSdGpFFV6wmPBPcg9x6m\np0ObZo1QKNYlr+P+7+7PEyFX1riS+mH18VE+rEtex5U1rnSt0YJwmRAfH098fHyBMnvzs5QFTxQi\nCcCtSqkgrfV5S1kTDC/JQVsnD3liCJ8++Gme6Fi6eyn94/uz/8x+u/NPCK7BlkfkxPkTdKjfoeIM\nEspMfo9IJb9KNKjcgKd/fpqawTVZdfeqvDTioQGhtKzdknUp6xgZO9KFFgvC5cPgwYOL7OiblJRE\nbKxz9jJy+dSMUipYKdVCKdXSUhRj+R5hOT5JKTU33ymfAyeBOUqpK5VSXYDXgdla64u22hvbYWwB\nz0duFs51yTI94+6kpYG/PwSUMAEnMSKeQ26waq64bFm7ZRERkktcZJw8n4LgxbhciABtgK1AIsYa\n5beAJCA3n29tICK3stY6A+gNVAY2A59g5BV5xJ7GCk+/VK1UlWY1mpGQIgGr7o61rKpZOVmczjwt\nMSIeQqVK4Ov7rxCZPWA2Ox/cWeyGap0iOrH39F6OnD1S5JggCJ6Py6dmtNarsSKItNbDiynbDVzn\nKBviImTE5QlYEyKnLhj7TcjyXc9AqX/TvIMxICiJTpGdAGNn5Vub3VoR5gmCUIG4XIi4A3GRccxM\nmsmpC6esvhAF15Kebj1QFZCpGQ8idwdeW9QNrUtMlRjWJa+7bIXIzp07XW2C4MW4+vclQgRDiACs\nT1lPv8bFb5AkuB5rHpHUDIsQkakZjyG/R8QWl2ucSPXq1QkKCuLOO+90tSmClxMUFJS3OV9FI0IE\niKocRZ2QOqxLXidCxI1JS7OeVRVkasaTCAuzX4h0iujEZ9s+49ylc4T4hzjXMDciMjKSnTt3cuLE\nCVebYpM//4RhwyA+Hho3Lnr81vm30r5+ex7v+HjFGyfYpHr16kRGRrqkbREiGAGscZFxErDq5qSl\nwRVXFH8s9XwqfiY/wgNKcJkIbkdpPSI5OoeNBzfSM6ancw1zMyIjI132B6I0nDxp/Ld9e4iKKnr8\n3M/naH51c1q3bl2hdgnujzusmnEL4iLj2HRoE5nZma42RSgBW1Mz1YOqS1I6D6I0QqRp9aZUrVT1\nspye8RSs5fkxazMnL5yUqVOhWESIWIiLjONSziUSDye62hShBGwFq8pLzrOwN1gVwKRMdIroJNsx\nuDG597K46dNTF05h1mYJJheKRYSIhatrXU2wX7CMuNwYax4R2XnX8yiNRwSMOJENKRvINmc7zyih\nzKSlQUgI+PgUPSYxXII1RIhY8DX50iGig8SJuClmM5w9W3Kwaup5yarqaZQmWBUMr2VGVgbbjm1z\nnlFCmbEWTC6r2gRriBDJR1yEEbAqW467H2fPgtbWY0REiHgWuVMzWttXv03dNgT4BIjX0k2xGsMl\neX4EK7iFEFFKdVZKLVZKHVJKmZVSA0pxbielVJZSKqm8dsRFxnHqwin+OvFXeS8lOBh7NrwTt69n\nER5ueLrOnbNdFyDAN4C29dqKEHFTbE2dmpSJKpWqVKxRgkfgFkIECAZ+Ax7A2G/GLpRS4cBcYIUj\njGhXv13eluOCe5EbCFfci05rzYnzJ8Tt62Hk3kt7A1bBiBNZl7wOba8bRagwrAaTZ6RSrVI1TMpd\n/uQI7oRb/Cq01j9orcdrrb8FSrP+cjrwGfCrI+wI8Q8xthwXIeJ25HpEipuDTruYRpY5S9y+Hkbh\nHXjtIS4yjiPnjrDvzD7nGCWUGasxIrKqTbCCWwiRsqCUGg5E8+8uvQ5BEpu5J9amZnIj8uVF51nk\n3svSCJGOER0BSEiWZ9TdsDU1IwMFoSQ8Uogopa4AXgGGau3YyNK4yDj2nt7L4bOHHXlZoZxYEyK5\nEfkSI+JZlEWIVK1UleY1movX0g2xFawqz6dQEh4nRJRSJozpmOe11v/kFjvq+p0iLFuOy4jLrUhP\nN/ITBAcXPSYR+Z5JWWJEAEls5qbYihGR51MoCU/cayYUaAO0VEq9bykzAUopdQm4Vmu9qqSTx4wZ\nQ3ihp2Xw4MEMHjwYgDqhdfK2HL+t+W3OsF8oA7nzz8VlcM/1iFQLqlbBVgnlISTEuJ+l8YiA4bWc\nmTSTk+dPyj13I2x5RGTq1HOIj48nPj6+QFlaaR/UUuCJQiQduKpQ2YNAd+AWYL+1kydPnmxz06W4\nyDjWJq8th4mCo7G1826VwCr4mjzx53z5YjJBaGjZhAhAQkoCA5rYvdJfcCJZWXDhQvHPaO6qNpma\n8RzyD85zSUpKIjY21intucXUjFIqWCnVQinV0lIUY/keYTk+SSk1F0Ab7Mj/AY4DmVrrnVrrC+W1\np2uDrvx+7HfOZJ4p76UEByGjLe+ktGneAaIqRxERFsGaA2ucY5RQaqzFcGVkZZCZnSlTM0KJuIUQ\nwZhq2QokYuQReQtI4t8VMbWBiIoypltUN8zaLAFxboRNISIvOY+kLEJEKUW3qG6s2r/KKTYJpcee\nYHIZLAgl4RZCRGu9Wmtt0lr7FPqMsBwfrrXuYeX8F7TW1udbSkF05WgiwiLkRedGWAuEE7ev51Ka\nHXjz0y2qG1uPbhWvpZtgLeGgbHgn2MIthIi7ISMu98OqR0Qi8j2WsnhEQLyW7oZVj4isahNsIEKk\nBGTE5V5I1kbvpLQ78OYiXkv3wlrmY8nzI9hChEgJyIjLvRCPiHdSVo+IeC3dC1sekbCAMAJ8AyrW\nKMFjECFSAjLici9KEiIXsi6QkZUhoy0PpaxCBMRr6U6kpUFAgPEpjMRwCbYQIVICMuJyH7QuOVhV\n9pnxbMoarAritXQnJKuqUB5EiFhBRlzuwYULkJ0tgXDeSHk8IuK1dB8kz49QHkSIWEFGXO6BtUA4\nWRro2YSFwaVLkJlZ+nPFa+k+2Mp8LM+nYA0RIlaQEZd7IMmSvJey7MCbH/FaugeScFAoDyJErCAj\nLvfAVkR+kF8QQX5BFWuU4BAcIUTEa+l6ZFWbUB7cQogopTorpRYrpQ4ppcxKKas7WSmlblZKLVdK\nHVdKpSml1iulrnWGbTLicj22sjbKS85zyb2nZQ1YFa+le1BSsGpWThZpF9PEYylYxS2ECBAM/AY8\ngLHXjC26AMuBG4DWwEpgiVKqhaMNkxGX67GVLEnmnz2X3HtaVo+IeC3dg5JiRCSGS7AHtxAiWusf\ntNbjtdbfAsqO+mO01m9qrRO11v9orZ8B9gD9HW2bjLhcj1UhIhH5Hk15p2ZAvJbuQElTM7KqTbAH\ntxAi5UUppYBQ4JQTri0jLheTlgYhIeDjU/SYBMJ5NuX1iIB4Ld2BEoWIBJMLduAVQgR4AmN6Z74z\nLi4jLtdiLRBOlgZ6Nn5+EBRUPiEiXkvXkpMDZ8/KzrtC2fF4IaKUGgI8B9ymtT7hjDZkxOVaJGuj\nd1Oe7KogXktXc+6c8d+Spmb8ffwJ9Q+tWKMEj8LX1QaUB6XUHcBM4Fat9Up7zhkzZgzhhZ6YwYMH\nM3jw4BLPyR1xrd6/mn6N+5XH5FKTfjEdkzIR4h9Soe26EyUFwuWYczh14ZS4fT2csu7Am59uUd34\n7I/PSMtMIzywBNXqJI6cPUKd0DoV2qY7YSuYvEZQDYzZc8FTiI+PJz4+vkBZWnkfUit4rBBRSg0G\nPgRu11r/YO95kydPpnXr1qVtyxhxHVhVOiMdQN/P+3L6wmkSRyVetrtXljQ1c+rCKTRaPCIeTnnS\nvOeS32vZt3FfxxhmByv2rqD3J735bOBnDPnPkApr152wlufnxPkTMlDwQIobnCclJREbG+uU9txi\nakYpFayUaqGUamkpirF8j7Acn6SUmpuv/hBgLvAYsFkpVcvyKSHJcPnpFtWNpCNJpGU6TxUWZtOh\nTaxLXsf21O28lvBahbVbEqOXjmbMD2O4lHOpQtu1FZEv88+ejSOEiKviRCb/OhmAR354JC8ewlX8\ndvQ3On3UiY0HN1Zou7YSDsrzKdjCLYQI0AbYCiRi5BF5C0gCXrAcrw1E5Ks/EvAB3gcO5/tMcZaB\nrogTeXfTu0RXjmZcp3G8tOYldqTuqLC2C3P47GFmJs5kysYp9Jjbg6PnjlZY2yXFiEhEvndQ3hgR\ncI3Xcs/JPSzbs4xXe75KjjmHsT+OrbC2i2P6lumsT1lPl4+7MDtpdoW1ay3hoKxqE+zBLYSI1nq1\n1tqktfYp9BlhOT5ca90jX/3uxdTNq+8Mckdcc36bw8Xsi85qJo+j547y5Z9f8tA1D/F8t+eJrhLN\nyCUjMWuz09sujoU7FuJr8mXZkGXsPb2X2Jmx/Hrw1wppW3IUeDeO8IjAv17LzYc2l/9idvDepveo\nHlSdR9o/wlvXvsUn2z7hx79/rJC2C5NtzmbRzkU8fM3DDG85nHuX3Mv9S++vEO+lrb2g5PkUy/2x\nBQAAGtlJREFUbOEWQsQTUErxfNfnWbxrMe0+bMefx/90ansztszAz8ePEa1GEOgbyMx+M1mfsp4Z\nW2Y4td2S+GrnV/SK6cUNV9xA4qhEoipH0WVOF2YlznJ629ayNvoonwoPThQciyOCVQFubnozLWu3\npONHHXlpzUtkm7PLf9ESSL+Yzpzf5nBf7H0E+gZyd8u76RHdg9HfjSbjUobT2i2JtQfWkno+laFX\nD2V6v+nM7DeTj377iO5zu3Pk7BGntp2WZuT4CSpmuydZXi/YgwiRUnBP63vYeO9GssxZtJnZhrc3\nvO0UD8WlnEt8sOUDhrUYRuXAygB0jerKyNYjeXLFkxxMP+jwNq1x5OwR1h5Yy23NbgOgTmgdVg5b\nyb2t72XU0lGMXjraqSMva8mSqgdVx6TkZ+zJOMojUqVSFTbcs4Fxncbx/Krn6TynM3tO7in/hYth\n7m9zOZ91nvvb3A8YA5UZ/WZw9NxRxq8c75Q2rbFgxwIahDegbd22AIyMHcnqu1ez/8x+YmfGsiFl\ng9Pazh0oFF4YY9ZmCVYV7ELe4KWkVZ1WJI5K5MG2D/LY8sfoNa8XyWnJDm1jwfYFHMs4xkPXPFSg\n/PXerxPsH8yDyx5Ea3u25HEMi3Yuwsfkw41Nb8wr8/fxZ1rfaXzY/0Pm/DaHm764iQtZFxze9qVL\nkJlpZf5ZXnIej6OECBi/yxd7vMi64etIzUil5YyWzNgyw6HPi1mbeXfTu9za7FbqhdXLK29UtREv\ndHuBKRunsOXwFoe1Z4sccw6Ldi7i1ma3Flgm275+exJHJRJTJYYe83o4bdqopIHCmcwz5OgcmZoR\nbCJCpAwE+gby1nVv8fNdP7Pn1B7+88F/+PyPzx12/Xc2vUPvmN40q9GsQHnlwMq83+d9Fu9azMKd\nCx3Wni0W7FhAr5heVK1Utcixe1rfw3dDvmPV/lUM+GIA57POO7Rt2XnX+wkPh/PnIduBMykdIjrw\n2+jfuPM/dzL6u9H0j+/PsXPHHHLtH//+kT2n9vBwu4eLHBvbYSwtarXg3sX3kpWT5ZD2bLE2eS3H\nMo7leSzzUzukNivuWkGvmF4M+GIAS3YtcXj7JQWT564iksGCYAsRIuWgR3QP/rj/D/o17sfQRUMZ\numhouZf3bjy4kU2HNhX7kgMYeOVAbmp6Ew8te4hTFxy+tU4Rjp47ypoDa4p9yeXSK6YX3w/9ng0p\nG+jzWR/OXTpXYt20zDS2Hdtmd/uyNND7yb235V05U5gQ/xBm9J/BksFL2Hx4M1dPv5ple5aV+7rv\nbHqH2DqxdKjfocgxX5Mvs/rP4o/jf/Dm+jfL3ZY9LNi+gIiwCK6pd02xxwN9A1k4aCH9Gvdj4PyB\nLNq5yOr1fj/6O+kX7b8ZtvaZkWdUsIUIkXJSObAynw38jE9v/pSlu5fSYnqLci3xfWfTOzSs0pA+\nV/Qpsc57N7xHZnYmkZMjGfjlQOZsnVPiaE9rzfGM4+w9vbdM9izauQiTMnFjkxut1usa1ZXl/13O\n1qNbue7T64oIsiNnjzBuxTgip0TScnpLNh3aZFf79mRtFDwbR2x8Z41+jfuxbfQ22tRtQ9/P+/LQ\nsofKPI2468Qufvj7Bx5u93CJ2UJj68Yytv1Ynv7laa6adhXjVowjITmBHHNOsfUvZl9k98ndVgV8\nSeSYc1i4c2GRaZnC+Pv488UtX3Brs1sZtGAQX/z5RYHjZm1mya4lxH0UR8sZLRmycIjd01klBZPL\nqjbBXjw2s6q7MfTqoXSK7MR/v/4vXT/uytNxTzO+63j8fPzsvsbhs4eZv30+b/R+w2oAZr2weiSO\nSuTL7V+ydPdS7ll8DxrNNfWu4bqG13Eh6wL/nP6Hvaf38s/pfzh36RwKxfp71tO+fvtS9WvBjgX0\njOlJtaBqNut2jOjIiv+u4NpPr6X3J7358c4fST2fypvr32Tu73MJ8AlgdJvR/LzvZ+5dfC+JoxJt\n/vtI1kbvJ/feOjGDNLVCarF08FKmbZ7G4z89zsr9K/l84Oe0qN2iVNd5b9N71Ayuye3Nb7da79Ve\nr9K+fnuW7F7C7K2zeS3hNapVqkafK/rQuFpj9p/Zzz+n/+GfU/9wMP0gGs0NjW5g2dDSeWzWJa8r\ncVqmMH4+fnx686f4+/gzdNFQLuVc4o6r7iD+j3jeWP8G21O30zGiI892fpaX1r7Egh0LGNR8kM3r\npqVBRETR8hPnT6BQxU7pCkJ+RIg4kKjKUawatopX173K86ueZ/ne5Xw/9Hu7H8QZW2YQ6BvI8JbD\nbdZtWLUhT3d+mqc7P01qRirL9ixj6Z6lvL/5fSoHVqZhlYZ0qN+BO6++k5gqMTy/6nmeW/kcP/33\nJ7v7c+zcMdYcWMOMfvYvGW5bry2/3PULvT/pTfNpzTl67ig1g2vyQrcXGN1mNJUDK7P1yFbazmrL\nm+vf5KnOT1m9XklCRGstUzNeQkUIETBWtjx4zYN0j+7OkIVDuObDa/ig7weMaGVf+qG0zDQ+/v1j\nxrQfY3O7BR+TD7c0u4Vbmt1CjjmHTYc2sXT3UpbsXsJ3e74jpkoMMVVi6FC/Aw2rNCT1fCpP/fwU\nCckJdIrsZHefFuxYQP2w+rSr386u+j4mH+bcOAd/kz93f3M341aM48i5I/Rr3I/p/aYTFxkHwI4T\nO3j4+4fpHdObKpWqWL1mWhpcdVXR8tSMVKpWqoqPycfu/giXKVrry+IDtAZ0YmKirgh+TflVh74S\nqh//8XG76mdmZeqab9TUD333kFPsWbhjoWYCevX+1XafM23TNO3zgo9OzUgtdXvbjm7T1396vZ6x\nZYa+kHWhyPEnlj+hA14M0LtP7LZ6nblztQatMzMLlqdlpmkmoL/444tS2ya4F0ePGvd48eKKazMz\nK1Pf9fVdOujlIH307FG7zpmyYYr2neirD6cfdrg9OeYcffUHV+sec3vYfU52Trau/WZt/ej3j5ap\nvadWPKWHfzNc/3HsjyLHD6Uf0uGTwvU9395j81rR0Vo/9VTR8jE/jNFN32taatsE9yQxMVFjZD5v\nrR3891liRJxEu/rteLT9o7y/+X270qHH/xnP8YzjRZbsOoqbm95Mq9qtGL9yvN1zvwt2LKBHdI8y\neR3+U+s/fD/0e0bFjiLQN7DI8QndJlAvrB73Lb3Pqj1paRAQYHzyI+ndvQdnx4gUR4BvAJOvm4yv\nyZfXE163WT/bnM27m95lUPNBTtlp16RMTOw2kV/2/WL3fjkJKQkcPXeU25rbnpYprr1Xer7CRzd+\nxFU1i7oz6obW5bVerzF762yb9liLEZH4EMEe3EKIKKU6K6UWK6UOKaXMSqkBdpzTTSmVqJTKVErt\nVkoNqwhbS8PYDmPx9/Hn1XWvWq139uJZnvnlGQZeOZAm1Zs4xRalFBO7T2T1gdX8su8Xm/WPZxxn\n9YHVds09l4UgvyCm953Oyv0rmfPbnBLrlRSRn7s0UKZmPJ/AQPDzq1ghAlC1UlXGth/LtC3TOHz2\nsNW67258l31n9vFExyecZs+AJgOIrRPLcyufs2uwsGD7AuqF1it13Je9jIwdSVxkHKOWjCoxuFdr\n68+oPJ+CPbiFEAGCgd+ABzBcP1ZRSkUBS4GfgRbAVOBDpVRv55lYeioHVuaxDo8xfct0DqUfKrHe\nhFUTOJN5hrevfdup9vS9oi/X1LvGrhfdop2LUChuvvJmp9nTu2Fv/nv1f3l8+eMlrvqRfWa8H6Uc\nm9SsNDza/lECfQOtDhYOpR9i/KrxPNDmAVrWbllivfKSO1hYl7yOn/Zaj+Uya3PeahlnZRY2KRMz\n+83kQNoBXl77crF1zp+HnBzZZ0YoH24hRLTWP2itx2utvwVKXoP2L/cDe7XW/9Na79Javw98BYxx\nqqFl4JH2jxDkF8SkdZOKPb7t2DambpzK+C7jaVC5gVNtUUoxsdtENhzcwA9//2C17oIdC+ge3d3p\nI5q3r3sbH5MPj/74aLHHJUfB5YGrhEh4YDiPd3icGYkzStw6YezysQT7BfNijxedbs8NjW6gff32\nNgcLCckJHDl3xGkey1yurHElT8c9zWsJr/HHsT+KHLeV50emTgV7cAshUgbaAysKlf0IFM0w5GLC\nAsJ4ouMTzEqaVSQVvFmbuf+7+2lcrTFjOlSMhrq24bV0iujE+FUlx4qkZqSyav8qp7/kwBASk6+b\nzBd/flFssilrWRsrB1Yu1fJowX0JD3d8QjN7ebjdw4T4h/DK2leKHFv+z3Lmb5/PW9e+lbfvkzNR\nSvFi9xfZdGgT3+35rsR6X+34inqh9egQ4fxX3ri4cVxR9QpGLhlZJBeKZD4WHIGnLt+tDRT25R8D\nwpRSAVrriyWduHgx/P67U20rQrj5Ifz12wz78BXuqjo9r3ztubmsP7We/9VcyWfz/CvIGkXHiy/y\nxvEePDJtCa2Ciobj/JT+OVrDha03M8f+JKhlRuuhNA/8hNvih3JPtbkFbNq5Exo2LHqOLN31LsLC\n4LffYE7J4UJOJJQeAf9j5pbniD78JNV9Dc9kls7kuSMP0jSgGxe3DGFOYsVYo3VPGgd04cGvxnO8\ndt8iicoumjP45MhCYivdwtyPK2IsGcBNPrN49VBn2r05iOHVZhNkMkTZ/v1GjcLBquezznM+67w8\no4J9OHoZTnk/gBkYYKPOLuDJQmU3ADlAQAnntAY0dNHQv9Dnc22EXTnx0/F1zXO+msr7jO+VTmqe\nqK4ZONT5bRf3GdZdM7qFRuUY31W2punXmru7aCagGTSwYu0JPKW540aj7WvHanwu5h0bP77oUrK7\nv7lbd/iwg/X1ZoLH8PDDLngG8n/8z2qeqKHpP/Lfsi4TjWe2xvaKt6fBKuNZaLro37KwZE2vJzVP\nVjHsqrOlYm1qukgzLlzzSLSm7ua88vBwrU+eLHg/95/er5mA/vHvH13zgxLKxeeff6779+9f4NOl\nSxdt/A11/PJdh17MIQbZJ0RWA28XKrsbOG3lnNaA3rw5Uefk6Ar/nM3M0LXeqKWHfzNC5+RoPWrx\nfTpsUpg+lHbEJfas3rdWMwE9K3G2fnv9ZB09JVozAd1pdif95R8L9MWsrAq3KTvbrN9eP1n7TvTV\n7Wa103tP7tc5OcU/KH0/66sHxA+w76kS3B6zueKfgcKfNxPe0r4TffWeE//oPSf+0YEvBer/LX/S\nZfb0nNtTX/X+VXrt/gQ9aP7t2ucFHx0+KVyP/eEx/c/JfS6x6e8Te3WbGW2030Q/PXXDOzo726zN\n5qL3c/OhzZoJ6KTDSRX/YxKcgjPziHjq1MwGDA9Ifq61lFvFZDI+FU1IQBDj4sbx+PLH6RXTk1lJ\nM3nnhneoG1a74o0BukTFcW3Daxm55B58Tb7c3vx2vrz1S9rWa+sSewwUYzo8SseIDtz+1e3EzmrF\n3Jvm0r9J/yI1T5w/QfMazV1go+AMlDI+ruT+tqN5c8MbvLR2Yl4OjPFdn3PJ+wLgxe4v0vGjjnT+\nuBONqjZiyvVTGNZiGKEBoa4xCGhYLZp1I9bx5IoneeTHh1mTvJrZA2YTHlgwSESW1wulwS2EiFIq\nGGjEvytmYpRSLYBTWusUpdQkoK7Wepjl+HTgQaXUa8BHQE/gVqDkneLcgPti7+P1hNcZumgorWq3\n4v4297vUnvf7vM/CHQv5b4v/Uje0rkttyU+7+u3Yet9Whn87nAFfDKBrg65EVY6iflh9IsIiiAiP\n4NDZQ3SL6uZqUwUvIsgviKfinuKRHx4B4OvbvybYP9hl9nSI6MCMfjOoE1KHvo37Om2ZbmkJ8A1g\nyvVT6NqgK8O/HU6zac24pt41xrNpeT7/PP4nIAkHBftQ2pi2cK0RSnUFVkKRHCJztdYjlFJzgAZa\n6x75zukCTAaaAQeBiVrrT6y00RpITExMpHXr1g7vg718sPkDHvr+IdaPWG/3/hCXK1prZiXN4ud9\nP5OSlkJKegqHzx7GrM2AsQvxg9c86GIrBW8iMzuTJu814epaV7P4jsVWd7QVYN/pfbye8Dr7zuwj\nJT2FlLQUzl46CxjekNQnUl1soeAokpKSiI2NBYjVWic58tpuIUQqAncRIlprjmccp1ZILZfZ4Mlk\nm7M5cvYIR88d5epaV9vcfEwQSsupC6cI9Q+VpeFlJC0zjZT0FIL8goipEuNqcwQH4Uwh4hZTM5cT\nSikRIeXA1+RLRLjh/hUEZyDb1peP8MDwIjEjgmAN95h0FARBEAThskSEiCAIgiAILkOEiCAIgiAI\nLkOEiCAIgiAILkOEiCAIgiAILkOEiCAIgiAILkOEiCAIgiAILkOEiBcSHx/vahMqBOmndyH99C6k\nn4K9uI0QUUo9qJTap5S6oJT6VSlldfc1pdSjSqm/lFLnlVLJSqm3lVKSZpPL58GQfnoX0k/vQvop\n2ItbCBGl1O3AW8DzQCvgd+BHpVSxWzcqpYYAkyz1mwIjgNuBlyvEYEEQBEEQHIJbCBFgDDBDaz1P\na/0XMBo4jyEwiqMDsE5r/aXWOllrvQKIB66pGHMFQRAEQXAELhciSik/IBb4ObdMGzvxrcAQHMWx\nHojNnb5RSsUAfYDvnGutIAiCIAiOxB02vasO+ADHCpUfA5oUd4LWOt4ybbNOGft0+wDTtdavWWkn\nEGDnzp3lt9jNSUtLIynJoZsjuiXST+9C+uldSD+9i3x/OwMdfW1lOB9ch1KqDnAI6KC13piv/DWg\ni9a6iFdEKdUNYyrmaWAT0Ah4B5iltX6phHaGAJ85vAOCIAiCcPkwVGv9uSMv6A4ekRNADlCrUHkt\n4GgJ50wE5mmt51i+b1dKhQAzgGKFCPAjMBTYD2SWx2BBEARBuMwIBKIw/pY6FJcLEa11llIqEegJ\nLAawTLf0xPByFEcQYC5UZs49Vxfj5tFanwQcquIEQRAE4TJivTMu6nIhYuFt4GOLINmEsYomCPgY\nQCk1DziotX7aUn8JMEYp9RuwEbgCw0uyuDgRIgiCIAiCe+IWQkRrPd8SfDoRY0rmN+A6rXWqpUp9\nIDvfKS9ieEBeBOoBqRjelGcrzGhBEARBEMqNy4NVBUEQBEG4fHF5HhFBEARBEC5fLgshUtp9bNwd\npVRnpdRipdQhpZRZKTWgmDoTlVKHLXvx/KSUauQKW8uDUuoppdQmpVS6UuqYUuprpVTjQnUClFLv\nK6VOKKXOKqW+UkrVdJXNZUEpNVop9btSKs3yWa+Uuj7fcY/vY3EopcZZfr9v5yvz+L4qpZ639Cv/\nZ0e+4x7fx1yUUnWVUp9Y+nLe8jtuXaiON7yL9hVzT81KqXctx73iniqlTEqpF5VSey3362+lVJGQ\nB0ffU68XIqXdx8ZDCMaIo3kAKDK3ppR6EngIGIWR9j4Do8/+FWmkA+gMvAu0A3oBfsBypVSlfHWm\nAH2BW4AuQF1gYQXbWV5SgCeB1hhZhn8BvlVKXWk57g19LIBlMDAK43nMj7f09U+MeLfalk9cvmNe\n0UelVGUgAbgIXAdcCTwGnM5Xx1veRW34917WBnpjvHvnW457xT0FxgH3YfxtaQr8D/ifUuqh3ApO\nuadaa6/+AL8CU/N9V8BB4H+uts1B/TMDAwqVHQbG5PseBlwABrna3nL2tbqlv3H5+nURuDlfnSaW\nOte42t5y9vUkMNwb+wiEALuAHsBK4G1vup8Yg56kEo55RR8tdr8KrLZRx1vfRVOA3V54T5dgJAbN\nX/YVRt4up91Tr/aIlHEfG49GKRWNodjz9zkdY5mzp/e5MsYo5JTleyzGyq/8fd0FJOOhfbW4Ru/A\nWL6+AS/sI/A+sERr/Uuh8jZ4T1+vsEyd/qOU+lQpFWEp96b72R/YopSab5k6TVJK3Zt70FvfRZa/\nK0OB2ZYib/rdrgd6KqWuAFBKtQA6Acss351yT91i+a4TKfU+Nl5AbYw/1sX1uXbFm+MYlFIKYxSy\nTmudO99eG7hkeRDy43F9VUpdhSE8AoGzGKOrv5RSrfCSPgJYRFZLjJd3YWrhHX39Fbgbw+tTB5gA\nrLHcY6/5zQIxwP0YU98vY7jp31FKXdRaf4KXvouAm4FwYK7lu7f8bsHwcoUBfymlcjDCN57RWn9h\nOe6Ue+rtQkTwHqYBzSg41+5N/AW0wHjB3QrMU0p1ca1JjkUpVR9DTPbSWme52h5nobXOnwL7T6XU\nJuAAMAjv2l7CBGzSWj9n+f67RWyNBj5xnVlOZwTwvda6pC1IPJnbgSHAHcAOjEHDVKXUYYu4dApe\nPTVD2fax8XSOYsTBeE2flVLvAX2Ablrrw/kOHQX8lVJhhU7xuL5qrbO11nu11lu11s9gBHE+ghf1\nEWNaogaQpJTKUkplAV2BR5RSlzBGVQFe0tc8tNZpwG6MzTm96X4eAQpvZ74TiLT8vze+iyIxAudn\n5Sv2pnv6OjBJa71Aa71da/0ZMBl4ynLcKffUq4WIZdSVu48NUGAfG6fkzHc1Wut9GD+I/H0Ow1h5\n4nF9toiQG4HuWuvkQocTMTLu5u9rE4wX4YYKM9I5mIAAvKuPK4D/YIyyWlg+W4BP8/1/Ft7R1zyU\nsSFnQ4wgP2+6nwkUneJuguH98bp3kYURGIJ5Wb4yb7qnQRRdiWnGohWcdk9dHaVbAVHAg4DzwF0Y\ny5FmYKxIqOFq28rRp2CMF3dLy4/kUcv3CMvx/1n62B/jxf8NsAfwd7XtpeznNIylgJ0xFHfuJ7BQ\nnX1AN4wRdwKw1tW2l7Kfr1j62AC4CpiE8WLr4S19tNL3vFUz3tJX4A2MJZwNgI7ATxh/vKp5Sx8t\n/WiDsVrkKQyhNQQjvumOfHW84l1k6YvC2L395WKOecs9nYMRZNvH8vu9GTgOvOLMe+ryjlfQP+4D\nlh/QBQyF2sbVNpWzP10tAiSn0OejfHUmYIzAzmNs29zI1XaXoZ/F9TEHuCtfnQCMXCMnLC/BBUBN\nV9teyn5+COy1/D6PAstzRYi39NFK338pJEQ8vq9APEaKgAuWl/rnQLQ39TFfX/oA2yzvme3AiGLq\nePy7yNKP3pb3TxH7veWeYgxy37aIqgyLwHgB8HXmPZW9ZgRBEARBcBleHSMiCIIgCIJ7I0JEEARB\nEASXIUJEEARBEASXIUJEEARBEASXIUJEEARBEASXIUJEEARBEASXIUJEEARBEASXIUJEEARBEASX\nIUJEEARBEASXIUJEEARBEASXIUJEEARBEASXIUJEEARBEASX8f/o9O/PpqhqywAAAABJRU5ErkJg\ngg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# -*- coding: utf-8 -*-\n", "\"\"\" \n", "Example of use Elman recurrent network\n", "=====================================\n", "\n", "Task: Detect the amplitudes\n", "\n", "\"\"\"\n", "\n", "import neurolab as nl\n", "import numpy as np\n", "\n", "# Create train samples\n", "i1 = np.sin(np.arange(0, 20))\n", "i2 = np.sin(np.arange(0, 20)) * 2\n", "\n", "t1 = np.ones([1, 20])\n", "t2 = np.ones([1, 20]) * 2\n", "\n", "input = np.array([i1, i2, i1, i2]).reshape(20 * 4, 1)\n", "target = np.array([t1, t2, t1, t2]).reshape(20 * 4, 1)\n", "\n", "# Create network with 2 layers\n", "net = nl.net.newelm([[-2, 2]], [10, 1], [nl.trans.TanSig(), nl.trans.PureLin()])\n", "# Set initialized functions and init\n", "net.layers[0].initf = nl.init.InitRand([-0.1, 0.1], 'wb')\n", "net.layers[1].initf= nl.init.InitRand([-0.1, 0.1], 'wb')\n", "net.init()\n", "# Train network\n", "error = net.train(input, target, epochs=500, show=100, goal=0.01)\n", "# Simulate network\n", "output = net.sim(input)\n", "\n", "# Plot result\n", "import pylab as pl\n", "pl.subplot(211)\n", "pl.plot(error)\n", "pl.xlabel('Epoch number')\n", "pl.ylabel('Train error (default MSE)')\n", "\n", "pl.subplot(212)\n", "pl.plot(target.reshape(80))\n", "pl.plot(output.reshape(80))\n", "pl.legend(['train target', 'net output'])\n", "pl.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Cuando las series a partir de las cuales se entrena la RNN son muy extensas en longitud, el entrenamiento de la red se puede hacer muy lento y además aumentar considerablemente los requerimientos en memoria, porque es necesario propagar toda la red en el tiempo, almacenar los resultados parciales de cada tiempo para posteriormente realizar la etapa Backward del algoritmo y comenzar con la siguiente época. Por esa razón, en el caso de RNN también se suele usar un procedimiento similar al entrenamiento mini-batch, en el que se propaga la red hacia adelante hasta un tiempo intermedio $(t)$, se realiza la etapa Backward, y por lo tanto la actualización de los parámetros de la red, y se continua la propagación hacia adelante a partir del tiempo $(t + 1)$. De esta manera se acelera la convergencia de la red y se disminuyen los requerimientos en memoria. A esta versión del algoritmo de entrenamiento se le conoce como Truncated BPTT." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Redes Neuronales Recurrentes Bidireccionales" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "En algunos problemas la información necesaria para hacer la predicción en un punto de la secuencia, implica conocer información del pasado, pero también del futuro. Por ejemplo en problemas de reconocimiento de voz o traducción, es usual que se requiera conocer la información de la secuencia completa. Las Bidirectional RNN (BRNN) corresponden a una modificación de las RNN en las que se incluye una capa adicional que en lugar de transmitir la información del tiempo $(t)$ al tiempo $(t + 1)$, lo hace al contrario. Las dos capas ocultas en este caso no tiene interconexión entre ellas, pero si con la capa de salida." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![alt text](Images/RNN_arc_3.png \"Neuronas\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Este tipo de arquitecturas se emplean tanto en casos en los que para cada entrada se requiere producir una salida, como en casos en los que se desea producir una única salida para toda la secuencia." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Long Short Term Memory RNN (LSTM)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El principal problema de las RNN convencionales es su incapacidad para aprender dependencias de orden superior en los datos, es decir, que el modelo capture información que le permita determinar la influencia que tiene un dato visto por el modelo hace varios tiempos atrás con respecto a la salida del modelo en el tiempo actual. Incluso, que pueda capturar depdencias cortas y dependencias largas al mismo tiempo. Esto sucede debido a que si se analizan con detenimiento las funciones de actualización de los parámetros, la matriz $\\bf{V}$ que contiene los pesos de los lazos de realimentación se multiplica así misma $(\\tau-1)$ veces, lo que implica que si sus valores son inferiores a cero, terminan desvaneciendose y si son muy grandes, terminarán divergiendo. A este hecho se suma que la aplicación consecutiva de múltiples funciones de activación, terminan por desvaner el resultado." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![alt text](Images/sigmoid_vanishing_gradient.png \"Neuronas\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Este problema ha sido estudiado ampliamente y se han propuesto múltiples alternativas desde finales de los años 80 y comienzos de los 90. De todas las arquitecturas propuestas, la de mayor éxito es una en la que se reemplazan los perceptrones por otro tipo de unidades básicas, llamadas celulas. Las redes neuronales recurrentes compuestas por dichas célculas se conocen con el nombre de Long-Short-Term-Memory Neural Networks (LSTM). Las LSTM fueron propuestas en 1997 y tienen la capacidad de aprender dependencias de tiempo corto, largo y así mismo de decir cuándo olvidar. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![alt text](Images/LSTM2.jpeg \"LSTM\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exponential Weighted Average" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Las LSTM usan como principio el promedio acumulado conocido como Exponential Weighted Moving Average (EWMA) y que originalmente fue propuesto para unas unidades conocidas como \"Leaky Units\". El EWMA tiene en cuenta más o menos información del pasado, de acuerdo con un parámetero. La regla de acumulación está dada por: $\\mu^{(t)} \\leftarrow \\beta \\mu^{(t-1)} + (1 - \\beta)\\upsilon^{(t)}$." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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8Ie6yWRSxsTEeMD3d8QDDzyQMXbs2NEjR44seP755xMAfvvb36YXFRVF5OfnFzz11FNJ+/fv10yaNGlUQUHB6IKCgtGrVq0KP/nfEZ8vvvgiZu7cuc0A9957b+vGjRsjvV7vccd5PB7JarUqXC4XNptNkZGR4TqR9+mXnR5lWd4gSVJWD89vDPlxM3Bc+hGEM1lvQxI2m42u/oAKwtlu7lwyS0vR9+c5x46lfckSqno6JtCtMvDzE088UXvfffe1Tp482bJu3boIj8dDdna247zzzrN+/fXX0bfffnvbvn37dBdddJE18JrZs2e3/vjHP85++umn67/55puYpUuXVixfvjw+8Px7770X96Mf/ahl9uzZbc8880y6w+GQtFqt3NN1VVVVafPz8wusVqvCbrcrNm7cuA/gpZdeSoiOjvaUlpbutdls0rnnnpt//fXXm5577jnD3//+9+S1a9eWA5jNZsV33313QK/Xy7t379bOnj07p7S0dG/n95k0adIoq9Wq7Pz4X/7yl6pZs2Z1aNddX1+vyc7OdgKo1WoiIiI89fX1qtTU1GB73ezsbNfDDz9cl52dPV6r1XovvPBC080333xCjcUGY2voecDXg/C+gnDSAhUGt9uN1+ulczMbu92O1+vt8jlBEE5cYEii8+PTp0+3bNy4Mdzj8TB16lTLRRddZH322WfTNm7cqM/JybHr9frgB35SUpInOjravXjx4tgRI0bYIiIigqnebrdLa9asiX7ttdeqYmNjvRMmTLCuWLEiavbs2caeriswJAHw+uuvx86dO3f4d999d3D16tVR+/bt03/22WexAGazWVlWVham0Wg6BBCn0ynNmzdveFlZmU6hUHD06NEu50AUFxfvP7HfsZ41NjYqv/zyy5jy8vLd8fHxnmuvvTZnwYIFcQ899FBL76/2GdDAIEnSJfgCwwXdPH8/cD/AsGHDBvDKBKFngcAAvmGJsLCOw6E2mw1ABAbhB6e3SsBAmzFjhmXRokVJXq9XeuCBBxpjY2O9DodDWr16deS55557XKOpW2+9tfVXv/rV8AULFhwOfXzFihVRZrNZOXbs2DEANptNERYW5u0tMISaPXt226OPPpoFIMuy9Pe//73ylltu6fCt/YsvvugwN+K5555LTkpKcn388ceHvV4vOp1uUlfnPpEKQ3JysvPw4cOa3Nxcl8vl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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt \n", "# make a hat function, and add noise\n", "x = np.linspace(0,1,100)\n", "x = np.hstack((x,x[::-1]))\n", "x += np.random.normal( loc=0, scale=0.1, size=200 )\n", "plt.plot( x, 'k', alpha=0.5, label='Raw' )\n", " \n", "Beta1 = 0.8\n", "Beta2 = 0.5\n", "x1 = np.zeros(200)\n", "x2 = np.copy(x1)\n", "for i in range(1,200):\n", " x1[i] = Beta1*x1[i-1] + (1-Beta1)*x[i]\n", " x2[i] = Beta2*x2[i-1] + (1-Beta2)*x[i]\n", "# regular EWMA, with bias against trend\n", "plt.plot( x1, 'b', label='EWMA, Beta = 0.8' )\n", " \n", "# \"corrected\" (?) EWMA\n", "plt.plot( x2, 'r', label='EWMA, Beta = 0.5' )\n", " \n", "plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)\n", "plt.show()\n", "#savefig( 'ewma_correction.png', fmt='png', dpi=100 )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Como se puede observar en la gráfica anterior, el parámetro $\\beta$ controla si la salida del promedio toma más en cuenta el dato actual (línea roja), o el histórico (línea azul). " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Las LSTM usan el mismo principio para controlar el nivel de memoria o de dependencia en el tiempo, pero en lugar de usar un parámetro constante, definen compuertas que son entrenadas como parte del algoritmo de entrenamiento y que deciden cuándo mantener y cuándo olvidar la información precedente. Una celula LSTM contiene tres compuertas, que se representan en la gráfica por la letra $\\sigma$, las cuales representan funciones sigmoide que garantizan que dichos valores están en el intervalo $(0,1)$. Adicionalmente, una célula LSTM define una variable adicional llamada estado. Las tres compuertas le permiten a la célula olvidar su estado o no, escribir o no, y leer o no." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![alt text](Images/LSTM2.png \"LSTM\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Usando la notación de la gráfica anterior, para el tiempo $t$ y la célula $l$, la célula estará descrita por las siguientes funciones:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$f_l^{(t)} = \\sigma \\left( b_l^f + \\sum_j U_{l,j}^f x_j^{(t)} + \\sum_j V_{l,j}^f h_j^{(t-1)}\\right)$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$ c_l^{(t)} = f_l^{(t)}c_l^{(t-1)} + i_l^{(t)}\\tanh \\left( b_l^c + \\sum_j U_{l,j}^c x_j^{(t)} + \\sum_j V_{l,j}^c h_j^{(t-1)} \\right)$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$i_l^{(t)} = \\sigma \\left( b_l^i + \\sum_j U_{l,j}^i x_j^{(t)} + \\sum_j V_{l,j}^i h_j^{(t-1)}\\right)$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$h_l^{(t)} = \\tanh(c_l^{(t)})o_l^{(t)}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$o_l^{(t)} = \\sigma \\left( b_l^o + \\sum_j U_{l,j}^o x_j^{(t)} + \\sum_j V_{l,j}^o h_j^{(t-1)}\\right)$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "donde $c_l^{(t)}$ es el estado de la célula en el tiempo $t$, por lo tanto la compuerta $f_l^{(t)}$ controla cuánto debe recordar la célula de su estado anterior $c_l^{(t-1)}$. Por otro lado, $i_l^{(t)}$ es una compuerta que controla cuánta influencia tendrá la información actual (entrada $x^{(t)}$ y salida anterior $h^{(t-1)}$) en el estado actual de la célula. La compuerta $o_l^{(t)}$ por su parte controla el nivel de activación de la salida." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El conjunto completo de parámetros que deben ser ajustados es entonces ${\\bf{V}}^f, {\\bf{U}}^f, {\\bf{b}}^f, {\\bf{V}}^c, {\\bf{U}}^c, {\\bf{b}}^c, {\\bf{V}}^i, {\\bf{U}}^i, {\\bf{b}}^i, {\\bf{V}}^o, {\\bf{U}}^o, {\\bf{b}}^o$. Al igual que con las RNN, también se pueden construir arquitecturas bidireccionales usando LSTMs. Pueden consultar el siguiente turorial: https://machinelearningmastery.com/develop-bidirectional-lstm-sequence-classification-python-keras/" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ejemplo (tomade: https://machinelearningmastery.com/time-series-prediction-lstm-recurrent-neural-networks-python-keras/)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import pandas\n", "import matplotlib.pyplot as plt\n", "dataset = pandas.read_csv('DataFiles/international-airline-passengers.csv', usecols=[1], engine='python', skipfooter=3)\n", "plt.plot(dataset)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/lib/python2.7/dist-packages/h5py/__init__.py:36: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n", " from ._conv import register_converters as _register_converters\n", "Using TensorFlow backend.\n" ] } ], "source": [ "import numpy\n", "import matplotlib.pyplot as plt\n", "import pandas\n", "import math\n", "from tensorflow.keras.models import Sequential\n", "from tensorflow.keras.layers import Dense\n", "from tensorflow.keras.layers import LSTM\n", "from sklearn.preprocessing import MinMaxScaler\n", "from sklearn.metrics import mean_squared_error" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(96, 48)\n" ] } ], "source": [ "dataset = dataset.values\n", "dataset = dataset.astype('float32')\n", "# normalize the dataset\n", "scaler = MinMaxScaler(feature_range=(0, 1))\n", "dataset = scaler.fit_transform(dataset)\n", "# split into train and test sets\n", "train_size = int(len(dataset) * 0.67)\n", "test_size = len(dataset) - train_size\n", "train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:]\n", "print(len(train), len(test))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# convert an array of values into a dataset matrix\n", "def create_dataset(dataset, look_back=1):\n", "\tdataX, dataY = [], []\n", "\tfor i in range(len(dataset)-look_back-1):\n", "\t\ta = dataset[i:(i+look_back), 0]\n", "\t\tdataX.append(a)\n", "\t\tdataY.append(dataset[i + look_back, 0])\n", "\treturn numpy.array(dataX), numpy.array(dataY)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# reshape into X=t and Y=t+1\n", "look_back = 1\n", "trainX, trainY = create_dataset(train, look_back)\n", "testX, testY = create_dataset(test, look_back)\n", "\n", "# reshape input to be [samples, time steps, features]\n", "trainX = numpy.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))\n", "testX = numpy.reshape(testX, (testX.shape[0], 1, testX.shape[1]))\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/100\n", " - 1s - loss: 0.0474\n", "Epoch 2/100\n", " - 0s - loss: 0.0240\n", "Epoch 3/100\n", " - 0s - loss: 0.0180\n", "Epoch 4/100\n", " - 0s - loss: 0.0167\n", "Epoch 5/100\n", " - 0s - loss: 0.0158\n", "Epoch 6/100\n", " - 0s - loss: 0.0151\n", "Epoch 7/100\n", " - 0s - loss: 0.0143\n", "Epoch 8/100\n", " - 0s - loss: 0.0132\n", "Epoch 9/100\n", " - 0s - loss: 0.0123\n", "Epoch 10/100\n", " - 0s - loss: 0.0114\n", "Epoch 11/100\n", " - 0s - loss: 0.0105\n", "Epoch 12/100\n", " - 0s - loss: 0.0096\n", "Epoch 13/100\n", " - 0s - loss: 0.0086\n", "Epoch 14/100\n", " - 0s - loss: 0.0077\n", "Epoch 15/100\n", " - 0s - loss: 0.0068\n", "Epoch 16/100\n", " - 0s - loss: 0.0061\n", "Epoch 17/100\n", " - 0s - loss: 0.0053\n", "Epoch 18/100\n", " - 0s - loss: 0.0047\n", "Epoch 19/100\n", " - 0s - loss: 0.0039\n", "Epoch 20/100\n", " - 0s - loss: 0.0035\n", "Epoch 21/100\n", " - 0s - loss: 0.0031\n", "Epoch 22/100\n", " - 0s - loss: 0.0028\n", "Epoch 23/100\n", " - 0s - loss: 0.0025\n", "Epoch 24/100\n", " - 0s - loss: 0.0024\n", "Epoch 25/100\n", " - 0s - loss: 0.0023\n", "Epoch 26/100\n", " - 0s - loss: 0.0022\n", "Epoch 27/100\n", " - 0s - loss: 0.0022\n", "Epoch 28/100\n", " - 0s - loss: 0.0022\n", "Epoch 29/100\n", " - 0s - loss: 0.0021\n", "Epoch 30/100\n", " - 0s - loss: 0.0021\n", "Epoch 31/100\n", " - 0s - loss: 0.0021\n", "Epoch 32/100\n", " - 0s - loss: 0.0021\n", "Epoch 33/100\n", " - 0s - loss: 0.0021\n", "Epoch 34/100\n", " - 0s - loss: 0.0021\n", "Epoch 35/100\n", " - 0s - loss: 0.0020\n", "Epoch 36/100\n", " - 0s - loss: 0.0021\n", "Epoch 37/100\n", " - 0s - loss: 0.0021\n", "Epoch 38/100\n", " - 0s - loss: 0.0021\n", "Epoch 39/100\n", " - 0s - loss: 0.0021\n", "Epoch 40/100\n", " - 0s - loss: 0.0021\n", "Epoch 41/100\n", " - 0s - loss: 0.0021\n", "Epoch 42/100\n", " - 0s - loss: 0.0021\n", "Epoch 43/100\n", " - 0s - loss: 0.0020\n", "Epoch 44/100\n", " - 0s - loss: 0.0021\n", "Epoch 45/100\n", " - 0s - loss: 0.0021\n", "Epoch 46/100\n", " - 0s - loss: 0.0021\n", "Epoch 47/100\n", " - 0s - loss: 0.0020\n", "Epoch 48/100\n", " - 0s - loss: 0.0021\n", "Epoch 49/100\n", " - 0s - loss: 0.0021\n", "Epoch 50/100\n", " - 0s - loss: 0.0021\n", "Epoch 51/100\n", " - 0s - loss: 0.0021\n", "Epoch 52/100\n", " - 0s - loss: 0.0021\n", "Epoch 53/100\n", " - 0s - loss: 0.0020\n", "Epoch 54/100\n", " - 0s - loss: 0.0019\n", "Epoch 55/100\n", " - 0s - loss: 0.0021\n", "Epoch 56/100\n", " - 0s - loss: 0.0020\n", "Epoch 57/100\n", " - 0s - loss: 0.0021\n", "Epoch 58/100\n", " - 0s - loss: 0.0020\n", "Epoch 59/100\n", " - 0s - loss: 0.0019\n", "Epoch 60/100\n", " - 0s - loss: 0.0022\n", "Epoch 61/100\n", " - 0s - loss: 0.0021\n", "Epoch 62/100\n", " - 0s - loss: 0.0021\n", "Epoch 63/100\n", " - 0s - loss: 0.0021\n", "Epoch 64/100\n", " - 0s - loss: 0.0020\n", "Epoch 65/100\n", " - 0s - loss: 0.0021\n", "Epoch 66/100\n", " - 0s - loss: 0.0020\n", "Epoch 67/100\n", " - 0s - loss: 0.0020\n", "Epoch 68/100\n", " - 0s - loss: 0.0020\n", "Epoch 69/100\n", " - 0s - loss: 0.0021\n", "Epoch 70/100\n", " - 0s - loss: 0.0021\n", "Epoch 71/100\n", " - 0s - loss: 0.0021\n", "Epoch 72/100\n", " - 0s - loss: 0.0020\n", "Epoch 73/100\n", " - 0s - loss: 0.0021\n", "Epoch 74/100\n", " - 0s - loss: 0.0020\n", "Epoch 75/100\n", " - 0s - loss: 0.0021\n", "Epoch 76/100\n", " - 0s - loss: 0.0021\n", "Epoch 77/100\n", " - 0s - loss: 0.0021\n", "Epoch 78/100\n", " - 0s - loss: 0.0020\n", "Epoch 79/100\n", " - 0s - loss: 0.0021\n", "Epoch 80/100\n", " - 0s - loss: 0.0020\n", "Epoch 81/100\n", " - 0s - loss: 0.0020\n", "Epoch 82/100\n", " - 0s - loss: 0.0021\n", "Epoch 83/100\n", " - 0s - loss: 0.0021\n", "Epoch 84/100\n", " - 0s - loss: 0.0021\n", "Epoch 85/100\n", " - 0s - loss: 0.0021\n", "Epoch 86/100\n", " - 0s - loss: 0.0020\n", "Epoch 87/100\n", " - 0s - loss: 0.0022\n", "Epoch 88/100\n", " - 0s - loss: 0.0020\n", "Epoch 89/100\n", " - 0s - loss: 0.0020\n", "Epoch 90/100\n", " - 0s - loss: 0.0021\n", "Epoch 91/100\n", " - 0s - loss: 0.0020\n", "Epoch 92/100\n", " - 0s - loss: 0.0020\n", "Epoch 93/100\n", " - 0s - loss: 0.0020\n", "Epoch 94/100\n", " - 0s - loss: 0.0020\n", "Epoch 95/100\n", " - 0s - loss: 0.0020\n", "Epoch 96/100\n", " - 0s - loss: 0.0020\n", "Epoch 97/100\n", " - 0s - loss: 0.0020\n", "Epoch 98/100\n", " - 0s - loss: 0.0021\n", "Epoch 99/100\n", " - 0s - loss: 0.0021\n", "Epoch 100/100\n", " - 0s - loss: 0.0020\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# create and fit the LSTM network\n", "model = Sequential()\n", "model.add(LSTM(4, input_shape=(1, look_back)))\n", "model.add(Dense(1))\n", "model.compile(loss='mean_squared_error', optimizer='adam')\n", "model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=2)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train Score: 23.26 RMSE\n", "Test Score: 47.68 RMSE\n" ] } ], "source": [ "# make predictions\n", "trainPredict = model.predict(trainX)\n", "testPredict = model.predict(testX)\n", "# invert predictions\n", "trainPredict = scaler.inverse_transform(trainPredict)\n", "trainY = scaler.inverse_transform([trainY])\n", "testPredict = scaler.inverse_transform(testPredict)\n", "testY = scaler.inverse_transform([testY])\n", "# calculate root mean squared error\n", "trainScore = math.sqrt(mean_squared_error(trainY[0], trainPredict[:,0]))\n", "print('Train Score: %.2f RMSE' % (trainScore))\n", "testScore = math.sqrt(mean_squared_error(testY[0], testPredict[:,0]))\n", "print('Test Score: %.2f RMSE' % (testScore))" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "trainPredictPlot = numpy.empty_like(dataset)\n", "trainPredictPlot[:, :] = numpy.nan\n", "trainPredictPlot[look_back:len(trainPredict)+look_back, :] = trainPredict\n", "# shift test predictions for plotting\n", "testPredictPlot = numpy.empty_like(dataset)\n", "testPredictPlot[:, :] = numpy.nan\n", "testPredictPlot[len(trainPredict)+(look_back*2)+1:len(dataset)-1, :] = testPredict\n", "# plot baseline and predictions\n", "plt.plot(scaler.inverse_transform(dataset))\n", "plt.plot(trainPredictPlot)\n", "plt.plot(testPredictPlot)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Bibliografía" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[1] Googfellow, I.; Bengio, Y.; Courville, A. \"Deep Learning\", The MIT Press, Cambridge, MA, USA, 2016. " ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.5" } }, "nbformat": 4, "nbformat_minor": 2 }